MAT(Memory Analyer Tool)入门拾遗

简介: MAT是基于Eclipse的内存分析工具,MAT(Memory Analyer Tool),它是一个快速、功能丰富的Java Heap的分析工具,它可以帮助我们查找内存泄漏和排查问题,而且还有丰富的报表统计等等。我们可以通过插件的形式运行还可以单独下载,在前文中我们介绍了如何安装MAT工具,详情可以翻阅查看。

前言

image.png
MAT是基于Eclipse的内存分析工具,MAT(Memory Analyer Tool),它是一个快速、功能丰富的Java Heap的分析工具,它可以帮助我们查找内存泄漏和排查问题,而且还有丰富的报表统计等等。我们可以通过插件的形式运行还可以单独下载,在前文中我们介绍了如何安装MAT工具,详情可以翻阅查看。

模拟OOM

我们前之前介绍了JDK命令工具来生成dump文件,如果是本地调试,我们可以参数来配置生成的目录。

-Xms10m -Xmx10m -Xmn8m -XX:+HeapDumpOnOutOfMemoryError 
-XX:HeapDumpPath=F:/heapdump.hprof
测试代码
// 测试代码
public static final int _MB = 1024 * 1024 ;
     
public static void main(String[] args) {
     List<Sub> strs = new ArrayList<Sub>();
     while( true ){
          strs.add(new Sub(String.valueOf(5 *_MB)));
     }
}

image.png

MAT打开快照文件

我们通过MAT工具打开File -> Open Heap Dump,打开生成的文件
image.png

MAT可疑点报表

打开之后就如下图所示,我们将其文件在MAT工具中打开。然后打开Leak Suspect(内存泄露可疑点)报表
image.png

点击完成之后,如下图所示,MAT会帮你分析出可疑的问题点所在

image.png

MAT堆栈信息

我们点击左上角的图标可以看到堆栈信息
image.png

通过MAT分析的堆栈信息,.我们可以清楚的看到那个方法,对象的占比

image.png

  • Shallow Heap(浅堆)

表示该对象自身占用的堆内存,不包括它引用的对象。针对非数组类型的对象,它的大小就是对象与它所有的成员变量大小的总和。

  • Retained Heap(深堆)

表示当前对象大小+当前对象可直接或间接引用到的对象的大小总和。换句话说,Retained Size就是当前对象被GC后,从Heap上总共能释放掉的内存。不过,释放的时候还要排除被GC Roots直接或间接引用的对象。

MAT堆栈详情

我们也可以查看下详情
image.png
image.png

我们也可以在主视图面板中点击Histogram

1). Histogram可以列出内存中的对象,对象的个数以及大小。
2). Dominator Tree可以列出那个线程,以及线程下面的那些对象占用的空间。
3).Top consumers通过图形列出最大的object。
4).Leak Suspects通过MA自动分析泄漏的原因。
image.png

MAT条件筛选

image.png

可以看出来那个对象占用了多大的内存还有实例的数量

image.png
image.png

GCRoots

image.png
image.png

MAT溢出源

Exclude all phantom/weak/soft etc. reference 意思是排除虚引用、弱引用和软引用,即只剩下强引用,因为除了强引用之外,其他的引用都可以被JVM GC掉,如果一个对象始终无法被GC,就说明有强引用存在,从而导致在GC的过程中一直得不到回收,最终就内存溢出了。
image.png
image.png

还可以点击支配树视图, 在此视图中列出了每个对象(Object Instance)与其引用关系的树状结构

image.png

我们可以看到同时包含了占用内存的大小和百分比。这个对象占用了95.08%肯定是不正常的。

image.png

目录
相关文章
|
6月前
|
SQL 人工智能 移动开发
Memory Analyzer(MAT)分析内存
MAT是Memory Analyzer tool的缩写,是一款非常强大的内存分析工具,只需要打开采集的hprof文件即可开始对内存开始分析对比,一款“傻瓜式“的堆转储文件分析工具,谁都能学会。
Win系统 - Hands-Free 和 Stereo 区别?
Win系统 - Hands-Free 和 Stereo 区别?
281 0
Win系统 - Hands-Free 和 Stereo 区别?
SAP QM初阶执行事务代码QDB1,报错- Sampling procedure NM000001 has no sampling scheme-
SAP QM初阶执行事务代码QDB1,报错- Sampling procedure NM000001 has no sampling scheme-
SAP QM初阶执行事务代码QDB1,报错- Sampling procedure NM000001 has no sampling scheme-
|
Android开发
【Android 内存优化】使用 Memory Analyzer ( MAT ) 工具分析内存 ( hprof 文件转换 | MAT 工具下载 | MAT 工具使用 )(二)
【Android 内存优化】使用 Memory Analyzer ( MAT ) 工具分析内存 ( hprof 文件转换 | MAT 工具下载 | MAT 工具使用 )(二)
226 0
【Android 内存优化】使用 Memory Analyzer ( MAT ) 工具分析内存 ( hprof 文件转换 | MAT 工具下载 | MAT 工具使用 )(二)
|
存储 开发工具 Android开发
【Android 内存优化】使用 Memory Analyzer ( MAT ) 工具分析内存 ( hprof 文件转换 | MAT 工具下载 | MAT 工具使用 )(一)
【Android 内存优化】使用 Memory Analyzer ( MAT ) 工具分析内存 ( hprof 文件转换 | MAT 工具下载 | MAT 工具使用 )(一)
581 0
【Android 内存优化】使用 Memory Analyzer ( MAT ) 工具分析内存 ( hprof 文件转换 | MAT 工具下载 | MAT 工具使用 )(一)
ABAP TEST-SEAM的使用tips和一些局限
ABAP TEST-SEAM的使用tips和一些局限
153 0