Eclipse Memory Analyzer Tool(MAT)是一个强大的基于Eclipse的内存分析工具,可以帮助我们找到内存泄露,减少内存消耗。
下载安装
1、MAT下载地址
2、首先将eclipse安装成功。
3、把MermoryAnalyzer中的mat文件夹复制到eclipse安装目录的dropins下,重新启动eclipse。查看Window->Preferences,出现Memory Analyzer代表安装mat成功。
模拟使用
模拟内存溢出
1、测试方法
2、配置运行参数
-Xms10m -Xmx10m
-XX:+HeapDumpOnOutOfMemoryError
3、执行结果
mat分析
1、mat打开hprof文件
2、内存分析概况
Shallow Size:
对象自身占用的内存大小,不包括它引用的对象。
针对非数组类型的对象,它的大小就是对象与它所有的成员变量大小的总和。当然这里面还会包括一些java语言特性的数据存储单元。
针对数组类型的对象,它的大小是数组元素对象的大小总和。
Retained Size:
Retained Size=当前对象大小+当前对象可直接或间接引用到的对象的大小总和。(间接引用的含义:A->B->C, C就是间接引用)
换句话说,Retained Size就是当前对象被GC后,从Heap上总共能释放掉的内存。
不过,释放的时候还要排除被GC Roots直接或间接引用的对象。他们暂时不会被被当做Garbage。
可参考:https://bjyzxxds.iteye.com/blog/1532937
3、dominator_tree视图
该视图以实例对象的维度展示当前堆内存中Retained Heap占用最大的对象,以及依赖这些对象存活的对象的树状结构。
4、Histogram视图
该视图以Class类的维度展示每个Class类的实例存在的个数、 占用的 [Shallow内存] 和 [Retained内存] 大小,可以分别排序显示。
5、Leak Suspects
6、OQL
OQl是对象查询语言,和SQL语句很相似,是从堆查询对象的,类相当于表,对象相当于行,对象属性相当于列。