内存泄露分析工具Memory Analyzer tool(MAT) 介绍

标签:
杂谈 |
分类: 手机世界 |
Java如何管理内存
Java的内存管理就是对象的分配
监视对象状态是为了更加准确地、及时地释放对象,而释放对象的根本原则就是该对象不再被引用。
为了更好理解GC的工作原理,我们可以将对象考虑为有向图的顶点,将引用关系考虑为图的有向边,有向边从引用者指向
以下,我们举一个例子说明内存管理。对于程序的每一个时刻,我们都有一个有向图表示JVM的内存分配情况
以下右图,就是左边程序运行到第6行的示意图。
http://s7/bmiddle/5da93c8fgb271340d4e66&690Analyzer
Java
两种常见的内存泄露
1.永久保存区内存溢出
java.lang.OutOfMemoryError:
Jvm默认的永久区为4M,如果未设置启动参数,很可能由于class类太多,导致永久区爆掉.设置set
设置-XX:PermSize
2.JVM调配使用的内存空间不足内存溢出
GC可用heapsize不足2%时抛出,java.lang.OutOfMemoryError:
MAT工具能够解决那些问题?
1.
2.
如何使用
先dump出内存,可以通过MAT工具分析内存使用情况,找到问题的关键.
案例介绍
设置jvm启动参数
加在jboss
其中红色标记的是内存溢出时内存状况写入到文件中.
写一段非常好资源的代码.
部署应用,通过链接,运行这段代码.
结果出来了.
http://s14/bmiddle/5da93c8fgb2713917947d&690Analyzer
Dump的结果在jboss的bin目录下.
分析:
使用mat,打开这个文件.
http://s9/bmiddle/5da93c8fgb27139b01488&690Analyzer
可以看到内存实际使用情况.
http://s1/bmiddle/5da93c8fgb2713a452c70&690Analyzer
某一块内存使用情况.
http://s15/bmiddle/5da93c8fgb2713add214e&690Analyzer
http://s13/bmiddle/5da93c8fgb2713b95735c&690Analyzer
下面出错的堆栈,可以看出问题到底是出在什么地方.
还可以使用jmap的命令dump出内存情况然后进行分析
使用
Dump出来的内存情况,直接用mat工具打开即可.
相关资料:
http://www.blogjava.net/rosen/archive/2011/01/26/321575.html
http://www.cnblogs.com/wangtianxj/archive/2010/10/19/1855751.html