MAT使用

概念

Shallow heap & Retained Heap

Shallow Heap就是对象本身占用内存的大小。

Retained Heap就是当前对象被GC后,从Heap上总共能释放掉的内存(表示如果一个对象被释放掉,那会因为该对象的释放而减少引用进而被释放的所有的对象(包括被递归释放的)所占用的heap大小)。

具体可以参考:官方文档

Incoming References & Outgoing References

Incoming References :表示该对象的入节点(引用到该对象的对象)

Outgoing References:表示该对象的出节点(被该对象引用的对象)

举个例子,对象 A 持有对象 B 的引用,对象 B 持有对象 C 的引用;

对象 B 的"Incoming references"是对象 A、B 的类对象

对象 B 的"outgoing references"是对象 C、 B 的类对象

视图

Histogram

列出内存中的对象,对象的个数以及大小。支持正则表达式查找,也可以计算出该类所有对象的retained size

Dominator Tree

列出最大的对象以及其依赖存活的Object (大小是以Retained Heap为标准排序的)。

Dominator Tree和Histogram的区别是站的角度不一样,Histogram是站在类的角度上去看,Dominator Tree是站在对象实例的角度上看,Dominator Tree可以更方便的看出其引用关系。

Unreachable

Unreachable指的是不可达对象。

Group

在Histogram和Domiantor Tree界面,可以选择将结果用另一种Group的方式显示(默认是Group by Object),切换到Group by package,可以更好地查看具体是哪个包里的类占用内存大,也很容易定位到自己的应用程序。

Path to GC Roots

查看一个对象到RC Roots的引用链。通常在排查内存泄漏的时候,我们会选择exclude all phantom/weak/soft etc.references,意思是查看排除虚引用/弱引用/软引用等的引用链,因为被虚引用/弱引用/软引用的对象可以直接被GC给回收,我们要看的就是某个对象否还存在Strong 引用链(在导出HeapDump之前要手动出发GC来保证),如果有,则说明存在内存泄漏,然后再去排查具体引用。

注意:Histogram是在类的角度进行分析,而Path To GC Roots是用来分析单个对象的,因此在Histogram无法使用Path To GC Roots查询,可以使用Merge Shortest Paths to GC roots查询,它表示从GC roots到一个或一组对象的公共路径。

OQL

OQL全称为Object Query Language,类似于SQL语句的查询语言,能够用来查询当前内存中满足指定条件的所有的对象。它的查询语句的基本格式为:

sql 复制代码
SELECT * FROM [ INSTANCEOF ]	<class_name> [ WHERE <filter-expression>]

DUMP文件比较

Histogram视图下可以通过工具栏的对比按钮来进行对比。

相关推荐
蘑菇丁16 分钟前
ansible批量生产kerberos票据,并批量分发到所有其他主机脚本
java·ide·eclipse
呼啦啦啦啦啦啦啦啦1 小时前
【Redis】持久化机制
java·redis·mybatis
我想学LINUX2 小时前
【2024年华为OD机试】 (A卷,100分)- 微服务的集成测试(JavaScript&Java & Python&C/C++)
java·c语言·javascript·python·华为od·微服务·集成测试
空の鱼7 小时前
java开发,IDEA转战VSCODE配置(mac)
java·vscode
P7进阶路8 小时前
Tomcat异常日志中文乱码怎么解决
java·tomcat·firefox
小丁爱养花8 小时前
Spring MVC:HTTP 请求的参数传递2.0
java·后端·spring
CodeClimb8 小时前
【华为OD-E卷 - 第k个排列 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
等一场春雨8 小时前
Java设计模式 九 桥接模式 (Bridge Pattern)
java·设计模式·桥接模式
带刺的坐椅9 小时前
[Java] Solon 框架的三大核心组件之一插件扩展体系
java·ioc·solon·plugin·aop·handler
不惑_9 小时前
深度学习 · 手撕 DeepLearning4J ,用Java实现手写数字识别 (附UI效果展示)
java·深度学习·ui