最近因项目原因,开始关注内存管理这块的东西,由于之前没怎么了解这块,刚开始不知道怎么下手,后来发现MAT这个工具,就搜了一些资料,下面是关于MAT使用的一些
方法
准备
(·)下载eclipse3.7
(·)安装MAT插件:http://download.eclipse.org/mat/1.1/update-site/
如果安装成功,就可以通过eclipse直接打开heapDumps文件
1.点击你要分析额程序
点击update Heap
然后点击 DUNP HPROF file ,打开heapDump文件
打开之后就是这样
下面就可以进行分析了
(1)histogram
列出了有每个种有多少实例,每种类型的实例集合的 shallow size 和 retained size . shallow size指的是对象所消耗的内存大小,如每个对象引起消耗4个字节,或者8个字节,取决于你的操作系统(32位,还是64位), retained size的概念依赖于Retained set 的概念,Retained set 指的是当对象X被回收时,所有被垃圾回收器移除的对象集合,
Retained size 即是Retained set所保持的内存大小。
(2)The Dominator Tree
列出了堆中最大的对象,第二层级的节点表示当被第一层级的节点所引用到的对象,当第一层级对象被回收时,这些对象也将被回收。这个工具可以帮助我们定位对象间的引用情况,垃圾回收时候的引用依赖关系。
(3)Path to GC Roots
被JVM持有的对象,如当前运行的线程对象,被systemclass loader加载的对象被称为GC Roots, 从一个对象到GC Roots的引用链被称为Path to GC Roots, 通过分析Path to GC Roots可以找出JAVA的内存泄露问题,当程序不在访问该对象时仍存在到该对象的引用路径。
MAT工具使用详解
本文介绍了如何使用MAT工具进行内存管理分析。首先需下载Eclipse 3.7并安装MAT插件,随后可通过Eclipse直接打开heapDumps文件进行分析。文章详细解释了三种主要分析方法:Histogram用于查看各类对象实例的数量及占用内存;Dominator Tree帮助理解最大对象及其引用关系;Path to GC Roots则能揭示导致内存泄漏的引用路径。

3万+

被折叠的 条评论
为什么被折叠?



