MAT使用教程
参考:
利用内存分析工具(Memory Analyzer Tool,MAT)分析java项目内存泄露
简单示例
1.构建一个内存泄漏场景
class Solution {
public static void main(String[] args) {
Vector v = new Vector(10);
while (true) {
Object o = new Object();
v.add(o);
o = null;
}
}
}
2.dump堆转储文件
jmap -dump:format=b,file=<dumpfile.hprof> <pid>
3.在MAT中导入文件
MAT默认最大内存占用量,若dump下来的文件过大会出现导入失败的情况
需要在mat目录下的MemoryAnalyzer.ini文件种改一下配置,最大占用内存设大一点,Xmx参数
再重启导入就可以了!
4.文件分析
这里只有一个,十分明显了,有多个可能的时候可以优先看自己项目里的(会出现jar包或jdk里面的)
示例里面就是main线程里Object泄漏了
点击到Details里看看
里面有详细的路径信息和对象存储的内容,示例种就是1个数组和泄漏的Object
也可以取多个文件对比着看
看下两个文件中对象数量的变化,因为示例中为同段代码跑了两次,就只看Object的变化了
参考的博客中就是根据对比间隔一天的dump文件找到内存泄漏源
5.内存泄漏解决
及时释放,比如Object达到一定数量就remove掉