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
列出大对象