Mat工具
一、图示
1.饼状图:反应的大的对象的占用的retainedsize。
a.可以反映出相关对象所在的类,大小,以及classloader。
2.柱状图:根据不同的类类型的实例个数,按实例的数目多少列出。
a.根据不同的类类型来列出所占用的大小。比如int[]类型的大小占用。
b.通过listobjects->with incoming references找出具体的变量名。
c.树状图可以根据不同包,类型,以及不同的classloader来查询占用情况。
d.可以通过比较两个hprof文件类类型的对象个数来定位增长。
e.柱状图可以列出不同类型的实例个数及所占大小。
3.树状图:根据不同对象占用的retainedsize列出。
二、使用OQL可以查询语句。
三、导出报告
四、使用举例
1.进入柱状图-》通过查找自己定义类的个数-》listobjects with incoming references-》选中某个对象-》Pathto gc roots (excludeall soft/weak/phantom references)
2.进入柱状图-》Groupby package-》找到自己的包,自己的类-》查看个数,占用大小。
3.树状图找出开销最大的对象。
进入树状图,根据显示出来的占用情况-》listobjects with outcoming references-》找出占用大的对象。
4.打开两个hprof文件,这两个文件是不同时刻的,通过比较数目及占有大小的变化来定位问题。
柱状图-》compareto another heap dump-》选择-》查看数目变化大的,或者retainedsize大的物件。也可以搜寻自己的类,来查看变化。
五、附
1.占用方式:
i.shallowsize:
a.对象本身占用内存的大小,不包含对其他对象的引用。
b.对象头+成员变量(不是成员变量值)的大小。
i.retainedsize:
a.对象能直接或间接访问到的对象的Shallow之和。
b.同样是指这个对象被回收后能够被gc的大小。