## 1.MAT工具的下载和安装
MAT(Memory Analyzer Tool)工具是eclipse的一个插件,使用起来非常方便,尤其是在分析 大内存的dump文件时,可以非常直观的看到各个对象在堆空间中所占用的内存大小、类实例数量、对象引用关系、利用OQL对象查询,以及可以很方便的找出对象GC Roots的相关信息,当然最吸引人的还是能够快速为开发人员生成内存泄露报表,方便定位问题和分析问题。
MAT工具的下载地址为: http://www.eclipse.org/mat/downloads.php
MAT插件的下载地址为: http://download.eclipse.org/mat/1.3/update-site
######2.下载下来后运行:
运行报错:
失望不???经过分析是jdk路径不对?为啥不对呢?jdk在mat文件夹下没有可以配置的地方,那就是走默认的jdk配置,结果没找到,没有命中目标文件jvm.dll。
那只能是jdk位数的问题了,位数不一样,安装后的jdk目录结构就不一样。
解决方法有两个:
1.下载和你jdk位数匹配的mat工具。
2.更换jdk为64位。
温馨提示:机器位数和jdk位数不配可能有问题,报jvm问题,http://www.2cto.com/kf/201208/151334.html
后续使用MAT内容持续更新~
######MAT工具详解:
Histogram(直方图)视图:
dominator_tree(支配树)视图:
基础概念:
Shallow Heap 和 Retained Heap
Shallow Heap表示对象本身占用内存的大小,不包含对其他对象的引用,也就是对象头加成员变量(不是成员变量的值)的总和。
Retained Heap是该对象自己的Shallow Heap,并加上从该对象能直接或间接访问到对象的Shallow Heap之和。换句话说,Retained Heap是该对象GC之后所能回收到内存的总和。
今天分析了一个堆dump:
以前用jdk自带的jvisualvm.exe工具:
这个工具有什么问题呢?dump上G了就打不开了,类似hashmap看不到具体内容是哪个class的东西~