MAT是什么
MAT是Memory Analyzer的简称,它是一款功能强大的Java堆内存分析器,是eclipse中的一个插件,不过也提供了独立的版本。可以用于查找内存泄露以及查看内存消耗情况。
官网下载地址:http://www.eclipse.org/mat/downloads.php
这里我选择的是集成到eclipse中的版本,安装完导入堆文件后的页面如图
安装完插件后 可能没有 Inspector页面 需要 搜索添加进来
主要可以用到两个地方
a.Dominator Tree:可以列出占用内存最大的线程,以及线程下面的那些对象占用的空间
b.Leak Suspects:MA分析出的可能导致内存溢出的地方。
Dominator Tree 分析
Shallow Heap :一个对象所占用的内存,不包含对其他对象的引用
Retained Heap :是shallow Heap的总和(单个对象占用内存*此对象的个数),也就是该对象被GC之后所能回收到内存的总和
分析方式:
1.查找线程下占用内存较大的对象(上图右边)
2.定位对象在代码里出现的位置(上图左边)
查看线程的相关日志,定位导致内存溢出的代码位置
本地启动项目 为了尽早的出现OOM异常 修改了 项目的启动参数
-Xms100m -Xmx100m -XX:+HeapDumpOnOutOfMemoryError