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页签;通过图形列出内存使用最大的对象;

 

原文地址:https://www.cnblogs.com/wzl0916/p/12928704.html