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的大小。