MyEclipse Profile 结合visualvm 监控内存泄露
来源:互联网 发布:大汉天子百度云源码 编辑:程序博客网 时间:2024/05/04 12:35
VisualVM是集成了多个JDK命令工具的一个可视化工具,它主要用来监控JVM的运行情况,可以用它来查看和浏览Heap Dump、Thread Dump、内存对象实例情况、GC执行情况、CPU消耗以及类的装载情况。在JDK Update7之后,VisualVM作为JDK的一部分发布,但同时VisualVM也发布独立的版本。VisualVM必须运行在JDK1.6以上的VM环境下,但可以用它来监控JDK1.4以上的JVM。
1:创建java工程VisualvmTest,写一个消耗内存的测试代码:
2:在MemoryLeak.java右键菜单选择【Profile As】->【Java Application】,在弹出如下窗口,选择【memory】.
3:程序开始启动运行,同时弹出visualvm窗口,如下图,【profile】tab可以看到对象大小比例。【监控】可以看到对的运行走向。
4:可以发现byte数组暂用比较大。在byte[]右键菜单选择【生成快照并显示栈分配跟踪】。能够快速定位在什么地方消耗比较大的内存,能够快速解决问题:
参考资料:VisualVM远程监控
1:创建java工程VisualvmTest,写一个消耗内存的测试代码:
- public class MemoryLeak {
- public static void main(String[] args) throws InterruptedException {
- int MAX_CONSUMERS = 10000;
- int SLEEP_BETWEEN_ALLOCS = 5;
- ConsumerContainer objectHolder = new ConsumerContainer();
- while (objectHolder.size() < MAX_CONSUMERS) {
- System.out.println("Allocating object "
- + Integer.toString(objectHolder.size()));
- objectHolder.add(new MemoryConsumer());
- try {
- Thread.currentThread().sleep(SLEEP_BETWEEN_ALLOCS);
- } catch (InterruptedException ie) {
- // Do nothing.
- }
- } // while.
- Thread.sleep(1000*60*60);
- } // main.
- } // End of MemoryLeak.
- class ConsumerContainer extends Vector {
- }
- class MemoryConsumer {
- public static final int MEMORY_BLOCK = 1024;
- public byte[] memoryHoldingArray;
- MemoryConsumer() {
- memoryHoldingArray = new byte[MEMORY_BLOCK];
- }
- } // End MemoryConsumer.
public class MemoryLeak {public static void main(String[] args) throws InterruptedException {int MAX_CONSUMERS = 10000;int SLEEP_BETWEEN_ALLOCS = 5;ConsumerContainer objectHolder = new ConsumerContainer();while (objectHolder.size() < MAX_CONSUMERS) {System.out.println("Allocating object "+ Integer.toString(objectHolder.size()));objectHolder.add(new MemoryConsumer());try {Thread.currentThread().sleep(SLEEP_BETWEEN_ALLOCS);} catch (InterruptedException ie) {// Do nothing.}} // while.Thread.sleep(1000*60*60);} // main.} // End of MemoryLeak.class ConsumerContainer extends Vector {}class MemoryConsumer {public static final int MEMORY_BLOCK = 1024;public byte[] memoryHoldingArray;MemoryConsumer() {memoryHoldingArray = new byte[MEMORY_BLOCK];}} // End MemoryConsumer.
2:在MemoryLeak.java右键菜单选择【Profile As】->【Java Application】,在弹出如下窗口,选择【memory】.
3:程序开始启动运行,同时弹出visualvm窗口,如下图,【profile】tab可以看到对象大小比例。【监控】可以看到对的运行走向。
4:可以发现byte数组暂用比较大。在byte[]右键菜单选择【生成快照并显示栈分配跟踪】。能够快速定位在什么地方消耗比较大的内存,能够快速解决问题:
参考资料:VisualVM远程监控
0 0
- MyEclipse Profile 结合visualvm 监控内存泄露
- MyEclipse Profile 结合visualvm 监控内存泄露
- VisualVM 实现JVM内存监控
- JVM内存监控:VisualVM远程监控JVM
- JVM内存监控:VisualVM远程监控JVM
- JVM内存监控:visualVM jconsole jstatd jmap
- JVM内存监控:visualVM jconsole jstatd jmap
- VisualVM监控java应用内存状态
- Android内存泄露监控
- java 内存泄露的监控
- java 内存泄露监控工具
- Java 内存泄露监控工具
- Java内存泄露监控工具
- 用visualvm监控远程java进程内存回收
- VisualVM远程监控
- 远程监控JVM--VisualVM
- visualVM 远程监控
- 远程监控JVM--VisualVM
- 数据结构之“查找”-0
- U盘文件被隐藏后的修复方法
- make clean、make mrproer 以及make distclean的区别
- linux su和sudo命令的区别
- mysql权限授予与收回
- MyEclipse Profile 结合visualvm 监控内存泄露
- Object-c 中的数据类型
- Android笔记:解决 Your project contains error(s),please fix them before running your application问题
- Eggs and Egg Info
- (3)Java语法结构(语句,函数篇)
- Hibernate总结(二)---hibernate中的各种映射
- NYOJ93 汉诺塔3(栈的应用)
- Object-c 结构体模拟类
- AressCard地址簿的制作