Eclipse Memory Analyzer(MAT)使用方法

本文详细介绍了如何使用Eclipse Memory Analyzer来诊断和定位JVM中的内存泄漏,包括加载dump文件、LeakSuspects分析、对象/类加载器分析及各种查询工具的应用。通过一步步操作,了解如何识别大对象泄漏、线程问题和集合效率,以及类加载器和线程分析的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Eclipse Memory Analyzer是Eclipse官方提供的用于分析JVM堆栈信息的工具

1,加载dump文件

加载完后选择Leak Suspects,会列出堆中占用比较大的可达对象,看到内存泄漏的可疑点以及细节信息,然后需要对实际代码进行分析,确认内存泄漏问题

查看OverView

datails中的Unreachable Objects Histogram可以查看不可达对象

Biggest Objects by Retained Size包含几个比较大对象,如果没有对象超过1%则忽略

2,查看泄漏报告Leak Suspect Report

一种是单个大对象导致泄漏,可以在dominator tree中排序

一种是有大量同类型对象泄漏,在dominator tree中使用类分组排序

泄漏嫌疑是线程时,会展示调用堆栈以及相关的栈帧和局部变量

3,大对象视图

菜单点击Query Browser > Leak Identification > Top Consumer,用于查看对象/类加载器/包的最大对象与饼图

4,寻找责任对象

在Histogram中选择对象右键Immediate Dominators,可查看在类级别上支配给定对象集的所有对象,它直接回答了“谁让这些对象保持活动状态”的问题,而不是“谁引用了这些对象”,利用每个对象只有一个直接支配者的事实,该工具可以过滤无用的支配者(例如java.*类),并直接查看负责的应用程序类。

5,类加载器分析

点击 Query Browser > Java Basics > Class Loader Explorer查看类加载器信息,可用于分析元空间占用过大问题。

类加载器将类装入JVM的内存中。在分析堆时,类加载器非常重要,原因有两个:第一,应用程序通常使用单独的类加载器加载组件。其次,加载的类通常存储在一个单独的空间(例如perm空间)中,该空间也可以被耗尽。

该表包含定义的类和活动实例的数量。如果一个类被多次加载,活动实例的数量可以指示哪个类加载程序更活跃,哪个应该被垃圾收集掉。

6,线程分析

一些堆转储文件包含有关线程的调用堆栈以及每个栈帧的Java本地对象的信息,可以分析线程的保留堆。

7,java集合使用分析

在工具栏点击Open Query Browser > Java Collections

Array Fill Ratio 打印数组的填充率,填充率是数组中非空元素的比例。

Arrays Grouped by Size Query 按大小分组的给定数组的分布直方图。

Collection Fill Ratio Query 打印给定集合填充率的频率分布。

Collections Grouped By Size Query 给定集合按大小的分布直方图。

Extract List Values Query 列出单个LinkedList、ArrayList、Vector、CopyOnWriteArrayList、PriorityQueue、ArrayQueue对象的元素。

Hash Entries Query 从哈希映射和哈希表中提取键值对。

Extract Hash Set Values Query 列出单个哈希集的元素。

Map Collision Ratio Query 打印类map集合的碰撞率的频率分布

8,终止器分析

在工具栏点击Open Query Browser > Java Basics > Finalizer Overview,终结器在内部垃圾收集清理对象时执行。因为只有在finalize方法完成时才能释放内存,所以finalizer中长时间运行的任务可能会阻止垃圾收集。

In processing by Finalizer Thread 提取终结器线程当前处理的对象。

Ready for Finalizer Thread 此查询按处理顺序显示准备完成的对象。

Finalizer Thread 此查询显示执行对象终结的守护进程线程。

Finalizer Thread Locals 此查询显示执行对象终结的守护进程线程的线程局部变量。

(*^▽^*)如对你有帮助,欢迎点赞与收藏哦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瓜头居

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值