MAT内存分析工具的使用
一、概述
Memory AnalyzerTool是一个快速且功能丰富的Java堆分析器,可帮助您查找内存泄漏并减少内存消耗。使用Memory Analyzer分析具有数亿个对象的高效堆转储,快速计算对象的保留大小,查看谁阻止垃圾收集器收集对象,运行报告以自动提取泄漏嫌疑者。
二、工具使用
1)heap dump文件介绍
Heap Dump,它也叫堆转储文件,是java进程在某个时间内的快照。它在触发快照的时候保存了很多信息:java对象和类信息。通常在写Heap Dump文件前会触发一次Full GC。
2)获取heapdump文件
通过jvisualVM工具中的jmx连接,在项目运行之前和运行之后,分别右击生成堆dump文件*. hprof文件,并将其下载到本地;用于mat分析;
3)mat内存分析工具使用
l 打开heapdump文件
通过菜单【file ---open heapdump】打开heapdump文件,并生成多个分析结果文件;
l Overview页签
展示进程当前内存的使用情况信息
l Histogram
点击overview页签下方的histogram,可打开histogram页签,展示内存中的对象,对象的个数及大小;
Class Name : 类名称,java类名
Objects : 类的对象的数量,这个对象被创建了多少个
Shallow Heap :一个对象内存的消耗大小,不包含对其他对象的引用
Retained Heap :是shallow Heap的总和,也就是该对象被GC之后所能回收到内存的总和;
选择其中某个对象,右击打开菜单选择 list objects ->with incoming refs 将列出该类的实例:
快速找出某个实例没被释放的原因,可以右健 Path to GC Roots–>exclue all phantom/weak/soft etc. reference;
l Leak Suspects
点击【overview】页签下方的leaksuspects,打开leaksuspects页签,自动分析内存内存泄漏的原因,可以直接定位到Class和行数;
l Dominator Tree
点击【OverView】页签下方的Domainator,可打开domainator页签;列出线程的树结构,及线程下面对象占用内存的空间。
l Top Comsumers
点击【OverView】页签下方的TopComsumers,打开TopComsumers页签;通过图形列出内存使用最大的对象;