上一篇文章《Eclipse安装Memory Analyzer详细教程》我们介绍了MAT的安装,这篇文章我们介绍下使用MAT分析内存泄漏的思路。
一、导入内存快照
这里我们用前面生成的案例来分析内存泄漏,案例在《实战Jvm内存溢出之GC overhead limit exceeded》。导入后是这样的。
二、根据直方图大致分析出内存溢出的对象
首先我们点击这个视图左上角的第二个选项,打开直方图
打开后如图:
很直观的进行了一个排序,说明在这里占用内存最多的是这个HeapOOM对象,排在第二位的是一个数组object。凭经验我们能知道这个是数组里面存储了过多的HeapOOM对象导致的内存溢出。
三、利用支配树查看对象信息
上面我们可以看到很多的HeapOOM的对象,这里我们可以利用支配树看到添加进list的对象,我们点击左上角的第三个按钮
我们找到内存占用最多的这个
然后我们展开,找到对象
这里就可以看到对象里面的值了,在前面的示例里面我们没有设置值,所以是空的。
四、找线程,分析代码
这里我们点击左上角的第五个按钮
然后找到占用内存最大的这个进程,展开看信息
从这里我们就能看到写的代码的报错地方,同时有对应的在第几行。然后我们再回来查找我们的代码,根据实际情况进行分析修改即可。
发表评论