Memory Analyzer是一款跨平台的java监控分析工具,该工具的主要作用就是用监控整个JAVA应用程序的状态和行为,通过读取应用程序运行时由 Java 运行时环境生成的转储文件快照,能够有效地帮助开发者发现在调试时无法发现的复杂问题,有从事JAVA开发和运行的朋友应该会用到这款软件。

使用教程

第一步,启动mat ,选择File->Open Heap Dump 选择你的dump文件。下面开始等待,mat解析dump文件需要花一些时间,在解析的同时会在硬盘上写入一些解析结果文件,这样下次打开时速度会快很多。有时候mat在解析过程中可能会出现出错的情况,这个时候可以将那些临时文件删除以后重试第一步,如果你的rp够好的话重试也许会解析成功。

第二步,查看内存泄漏分析报表。mat解析完成以后会出现如下图的提示:

java 内存监视工具 java内存泄漏检测工具_JAVA

因为我们就是为了查找内存泄漏的问题,所以保持默认选项直接点“Finish”就可以。

Mat会非常直观的展现内存泄漏的可疑点,类似下面的报表可以直接看到某个线程占用了大量的内存

java 内存监视工具 java内存泄漏检测工具_java 内存监视工具_02

问题的详细分析信息:

java 内存监视工具 java内存泄漏检测工具_java 内存监视工具_03

第三步,开始寻找导致内存泄漏的代码点。这时往往需要打开对象依赖关系树形视图,点击如图按钮即可。

java 内存监视工具 java内存泄漏检测工具_内存泄漏_04

这时会看到如下视图

java 内存监视工具 java内存泄漏检测工具_java Analyzer_05

这个视图的左边大区域可以看到对象的依赖关系,选中某个对象以后可以在左边小窗口查看对象的一些属性。如果属性的值是一些内存地址你还可以点击工具栏的搜索按钮来搜索具体的对象信息。在进行具体分析的时候MAT只是起了帮助你进行分析的工具的功能,OOM问题分析没有固定方法和准则。只能发挥你敏锐的洞察力,结合源代码,对内存中的对象进行分析从而找到代码中的BUG.