Java堆分析器(MAT)

821 阅读1分钟

Java堆分析器,用于查找内存泄漏

Heap Dump,称为堆转储文件,是Java进程在某个时间内的快照

下载地址 :www.eclipse.org/mat/downloa…

1,Dump信息包含的内容

  • All Objects

Class, fields, primitive values and references

  • All Classes

Classloader, name, super class, static fields

  • Garbage Collection Roots

Objects defined to be reachable by the JVM

  • Thread Stacks and Local Variables

The call-stacks of threads at the moment of the snapshot, and per-frame information about local objects

2,获取Dump文件

  • 手动

jmap -dump:format=b,file=heap.hprof 44808

  • 自动
-Xms50M -Xmx50M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/CTO/11/heap.hprof

生成heap.hprof 然后用MAT.app打开这个文件

3,使用

  • Histogram
Class Name:类名称,java类名 Objects:类的对象的数量,这个对象被创建了多少个
Shallow Heap:一个对象内存的消耗大小,不包含对其他对象的引用
Retained Heap:是shallow Heap的总和,即该对象被GC之后所能回收到内存的总和

Histogram可以列出内存中的对象,对象的个数及其大小

右击类名--->List Objects--->with incoming references--->列出该类的实例

右击Java对象名--->Merge Shortest Paths to GC Roots--->exclude all phantom/weak/soft etc.references--->找到GC Root以及原因

  • Leak Suspects

查找并分析内存泄漏的可能原因

Reports--->Leak Suspects--->Details

  • Top Consumers
列出大对象