MAT(memory analyzer tool)主要功能

MAT(Memory Analyzer Tool),是一款快速便捷且功能强大丰富的JVM堆内存离线分析工具。其通过展现JVM异常时所记录的运行时堆转储快照(heap dump)状态(正常运行时也可以做堆转储分析),帮助定位内存泄漏问题或优化大内存消耗逻辑。

MAT主要适用场景:

  1. 内存溢出, JVM堆区放不下存活及待申请的对象。如:高峰期系统出现OOM异常,需定位内存瓶颈点来指导优化。

  2. 内存泄漏,不会再使用的对象无法被垃圾回收器回收。如:系统运行一段时间后出现Full GC,直到周期性OOM,最终需人工重启解决。

  3. 内存占用高,内存占用高,影响服务实时性、稳定性、吞吐能力。

  4. CPU高,频繁GC引起CPU极高。

  5. 业务对象分析,比如会话数量分析、大对象分析、循环过多分析等等。

Heap Dump

Heap Dump是Java进程堆内存再一个时间点的快照,通常情况下,快照会包含关于堆中Java对象和类的信息,这些信息是再生成快照时的,所以堆是具有时效性,不同时刻获取的堆内容一般不相同,主要内容如下:

  1. 所有对象的实例信息:对象所属类名、基础类型和引用类型的属性等;

  2. 所有类信息:类加载器、类名、继承关系、静态属性等;

  3. GC Roots:GC Roots代表通过可达性分析来判断JVM对象是否存活的起始集合;

  4. 线程栈及局部变量:快照生成时刻的所有线程的线程栈帧,以及每个线程栈的局部变量。

Shallow Heap

Shallow Heap代表一个对象结构自身所占用的内存大小,如java.util.ArrayList对象的Shallow Heap包含8字节的对象头、8字节的对象数组属性elementData引用、4字节的size属性、4字节的modcount属性,Shallow Heap又叫浅堆。

Retained Set

对象retained set,是指该对象被GC回收后,所有能被回收的对象集合;另外,当该对象无法被GC回收,则其retained set也必须无法被GC回收。

Retained Heap

Retained Heap是一个对象被GC回收后,可释放的内存大小,等于释放对象的Retained Set中所有对象的Shallow Heap的和,Retained Heap又叫深堆。

Dominator Tree

如果所有指向对象Y的路径都经过对象X,则X支配Y。 Dominator Tree是根据对象引用及支配关系生成的整体树状图,支配树清晰描述了对象间的依赖关系,如下图,左边是引用关系,右边是支配树。

OQL

OQL是类似于SQL的MAT专用统一语言,可以根据复杂的查询条件对dump文件中的类或者对象等数据进行筛选。

References

包含outgoing references、incoming references,均反映了对象间直接依赖关系。

  1. outgoing references:对象引用的外部对象(注意不包含对象的基本类型属性)

  2. incoming references:直接引用了当前对象的对象,每个对象的incoming references可能有1到多个。

MAT通用设置

mat自身默认内存为1024M,

mat的默认文件结构

MemoryAnalyzer.ini文件

MAT的主要功能

(1)全局信息

(2)统计Histogram

(3)支配树

(4)OQL查询

(5)线程信息

(6)堆预览、泄漏分析、大对象分析、报告分析

(7)引用关系、GC Roots、Java基础、Java集合等等。

相关推荐
一起养小猫5 分钟前
Flutter for OpenHarmony 实战:番茄钟应用完整开发指南
开发语言·jvm·数据库·flutter·信息可视化·harmonyos
一起养小猫18 分钟前
Flutter for OpenHarmony 实战:数据持久化方案深度解析
网络·jvm·数据库·flutter·游戏·harmonyos
u01092727140 分钟前
使用XGBoost赢得Kaggle比赛
jvm·数据库·python
tb_first1 小时前
SSM速通4
java·jvm·spring·tomcat·maven·mybatis
2401_857683543 小时前
为你的Python脚本添加图形界面(GUI)
jvm·数据库·python
m0_706653233 小时前
使用Python自动收发邮件
jvm·数据库·python
爱学习的阿磊5 小时前
Python入门:从零到一的第一个程序
jvm·数据库·python
naruto_lnq5 小时前
编写一个Python脚本自动下载壁纸
jvm·数据库·python
独自破碎E7 小时前
字符串相乘
android·java·jvm
2301_822375447 小时前
Python虚拟环境(venv)完全指南:隔离项目依赖
jvm·数据库·python