eclipse mat怎么用

2023-04-16 10:36 25次浏览 攻略

前言

前几篇文章,我们聊过了JVM性能监控工具Visual VM的使用。今天到来一篇内存分析工具的使用,Eclipse的MAT~

不过,哈哈。文章内容还是来自我学弟的总结的,关于内存分析的文章。Eclipse应该已经成为我们一代人的记忆了,虽然作为IDE,它已经不再是首选。但是其中很多工具放在现在仍然拥有不俗的战斗力,比如MAT。

今天让我们走进MAT的使用,一步步来对内存进行分析~

如果感觉文章不错,百度:博客园 像风一样。就可以看到他

正文

MAT内存分析工具

MAT是Memory Analyzer的简称,它是一款功能强大的Java堆内存分析器。可以用于查找内存泄露以及查看内存消耗情况。MAT是基于Eclipse开发的,是一款免费的性能分析工具。读者可以在下载并使用MAT。

1 初识MAT

在分析堆快照前,首先需要导出应用程序的堆快照。在本书前文中提到的jmap、JConsole和Visual VM等工具都可用于获得Java应用程序的堆快照文件。此外,MAT本身也具有这个功能。

单击左上角的“File”菜单下的“Accquire Heap Dump”选项后,会弹出当前Java应用程序列表,选择要分析的应用程序即可,如图所示。

除了直接在MAT中导出正在运行的应用程序堆快照外,也可以通过“Open Heap Dump”来打开一个既存的堆快照文件。

注意:使用MAT既可以打开一个已有的堆快照,也可以通过MAT直接从活动Java程序中导出堆快照。

如图所示,显示了正常打开堆快照文件后的MAT的界面。

右侧界面中,显示了堆快照文件的大小、类、实例和ClassLoader的总数。在右侧的饼图中,显示了当前堆快照中最大的对象。将鼠标悬停在饼图中,可以在左侧的Inspector界面中,查看该对象的相应信息。在饼图中单击某对象,可以对选中的对象进行更多的操作。

在工具栏上单击柱状图,可以显示系统中所有类的内存使用情况。图为系统内所有类的统计信息,包含类的实例数量和占用的空间。

另外一个实用的功能是,可以通过MAT查看系统中的Java线程,如图所示。

当然,这里查看Java层面的应用线程,对于虚拟机的系统线程是无法显示的。通过线程的堆栈,还可以查看局部变量的信息。如上图所示,带有“<local>”标记的,就为当前帧栈的局部变量,这部分信息可能存在缺失。

MAT的另外一个常用功能,是在各个对象的引用列表中穿梭查看。对于给定一个对象,通过MAT可以找到引用当前对象的对象,即入引用(Incomming References),以及当前对象引用的对象,即出引用(Outgoing References),如图所示:

下图显示了with outgoing reference 的输出。

为了方便查看,柱状图还提供了根据Class Loader和包对类进行排序。如下图是按照包排序的柱状图输出。

未完待续

尾声

因为篇幅原因,这篇文章就暂时写到这里。下篇文章:《MAT:浅堆和深堆》

相关推荐