Eclipse内存分析器(MAT)

过去,在复杂的Java应用程序中查找零星内存问题时,它需要使用商业产品(例如JProbe)或许多痛苦而低效的尝试来重新创建问题。 即使问题很容易重现,除非问题很明显,除非您的应用程序可能需要以迭代方式进行增强,以收集足够的信息来开始诊断问题。 而且,不要以假设引发OOM的类/方法/行是您的问题所在为新手错误。 恰好是无法获得必要内存的代码。

幸运的是,现在我们有了一个不错的免费工具,它与Eclipse集成在一起,称为“内存分析器”或MAT。 可以通过标准更新站点进行安装,只需键入内存分析仪并按照安装说明进行操作即可。 如果您只想查找问题区域,则不需要图表功能。 我假设您要么在OutOfMemory上生成了一个堆转储,要么已连接到活动的vm来提取一个。 如果您没有虚拟机并且虚拟机正在运行,则可以使用MAT提取虚拟机。 只需查看“文件”菜单中的“获取堆转储”选项。

首次打开堆转储时,MAT会询问您是否要运行其罐头报告之一。

这可能不值得您花时间。 我还没有发现它们可以提供任何有意义的见解。 也许如果您的应用程序非常简单,问题很明显,或者在调优组件报告的情况下,这些报告可能值得一试。 但是,您最好的起点可能是看一看统治者树。

使用图标(“按保留大小划分的最大对象”部分下的“统治者树”链接),或将其选择为“动作”。

首先,默认的“统治者树”视图显示单个对象。 如果没有什么立即发生,您可以采取以下一项或两项措施。

  • 选择“分组结果依据...”图标并按类别分组
  • 右键单击标题行,然后选择“列”->“编辑过滤器”->“类名”,或开始在正则表达式行中键入(如果有)

这样,您可以查看每种类型的对象数,还可以通过代码或怀疑可能导致问题的其他程序包名称模式来过滤它们。 找到您想深入研究的条目后,您可以通过多种方法来获取其他信息。 如果扩展类选择,您将能够看到对象所持有的引用及其大小(保留的对象)。 而且MAT足够聪明,您可能已应用的过滤器不会扩展到这些保留的对象。

如果右键单击类条目并选择“显示保留集”,您将看到该对象最终包含的所有内容的所有保留对象,这是一个非常方便的视图,可以帮助您快速查明问题类。

也许您无法理解为什么堆转储中有这么多特定对象类型的实例,感觉它们应该短暂存在或数量有限。 “ GC根目录的路径”(选择单个对象实例时可用)和“合并GC根目录的最短路径”(对于多个实例)使您可以查看有关对象的视图,从而可以查看哪些对象正在维护对它们的引用有问题的对象。

有了这些工具,视图和过滤器,我发现没有必要使用MAT的其他一些功能,但是一定要看一下OQL(SQL风格的查询堆详细信息的功能),直方图甚至是专门的Java集合用法的详细信息。

有了类后,您想在代码级进行调查,假设您的工作区中已有源代码,请从任何这些视图中右键单击该类,然后选择“开放源文件”。

我已经能够成功使用MAT查明我接触很少的应用程序中的内存问题。 它提供了具体的内存概述,当长期的项目开发人员可能倾向于这样做时,它不会显示出偏见。 如果您碰巧对您的应用程序有一个很好的了解,那就更好了。 这些知识将帮助您围绕MAT显示的某些数据周围放置上下文。 您对MAT有什么经验?

参考: Carfey Software博客上的JCG合作伙伴提供Eclipse和内存分析器(MAT)

相关文章 :

翻译自: https://www.javacodegeeks.com/2011/08/eclipse-memory-analyzer-mat.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值