使用前一些有用的链接
下载
http://eclipse.org/mat/downloads.php
基础手册
文章概要:
关于overview:
- 右侧饼状图中包含了占用内存比较大,或者对象数目比较多的对象。点击某一个分片,会有其对应的shallow size, retained size.
- 左侧 inspector 里面包含了当前对象的一些概述信息,以及当前对象中存储了哪些属性、类信息等
右下侧,是一些常用的分析操作(Action, Report, Step by step)。
关于Histogram: 右键某个object,可以做无数分析操作。
- 可以精确计算某个对象的retain size: 选中某个类,然后选择计算精确的retain size大小即可
- 选中某个类的条目,然后可以做很多的事情:
- 另外可以按照类加载器、包、父类进行汇总
关于 Dominator tree: 展示了heap dump 中 的一些大对象。下一级展示了如果当前节点被回收,会有哪些incoming references 会被回收。支配树可以表明哪些对象使某个对象存活。另外,这棵树可以按照类加载器或者组件或者包去进行汇总,这对于分析来说非常有利。
关于 Path to GC Roots: gc root 是一些被JVM自身管理的存活对象,这些内容包括当前运行的线程对象,调用栈,被类加载器加载的类等等。
Path to gc roots 表明对象之所以不被回收的原因。路径可以协助分析Java内存泄露。内存泄漏是因为程序不再使用这个对象,但是它还在被引用。
关于 The Leak Report: MAT 可以分析heap dump ,然后进行泄露猜测。 比如猜测比较大的对象。详细可以参考 “自动heap dump 分析:轻松发现泄露” 一文。
名词解释
Shallow size :对象自身占用空间的大小。对于非数组对象主要靠自身属性的数量以及种类; 对于数组主要以依赖数组长度,以及里面存储的元素。
Retained size : 某个对象被GC,这个过程中所有被回收对象占用内存之和。
incoming reference: These references have kept the object alive and prevented it from being garbage collected . 两个使用incoming reference的地方: Dominator 和 path to gc root .
outgoing reference: 当前对象引用了哪些对象。
GC Roots: 一些堆外可达的对象。GC root满足的条件可以参考参考文件中的链接。
参考文献
http://toolkit.globus.org/toolkit/testing/tools/docs/help/sizes.html 讲解shallow size 与 retained size
http://xmlandmore.blogspot.com/2014/01/eclipse-mat-understand-incoming-and.html incoming and outgoing reference
http://help.eclipse.org/neon/index.jsp?topic=%2Forg.eclipse.mat.ui.help%2Fconcepts%2Fgcroots.html gc root