2013-03-01
Memory Analyzer Tool (MAT) 這工具蠻好用的,但是常常太久沒用之後就忘了這東東要怎麼操作,所以還是乖乖的寫份memo比較實在...囧rz
===========================================================================
<MAT功能簡介>
請參考下述儿份文章
1.
Memory Analyzer Tool (MAT) 簡介
2.
10 Tips for using the Eclipse Memory Analyzer
===========================================================================
<MAT比較重要的儿項功能>
條列如下。一開始可能看不太懂,多實作儿次後就會有fu了...:)
1.Histogram:列出每個class產生了多少個instance
2.Dominator Tree:列出物件實例(Object instance)的樹狀結構。它的樹狀階層代表父階層參照(reference)多少子階層的物件
3.Leak Suspects report:產生memory leak report
4.Inspector:列出物件裡的資料明細。這功能就像用ide進行debug時,只要游標指到變數名稱,ide就自動幫你帶出該變數內容
除了上述部份外,幾乎每個功能表(或圖)裡都會出現ShallowHeap跟RetainedHeap這二個欄類。這二個東西是指什麼還蠻重要的,建議把它的差異搞懂(可以
參考這份文章)。通常我會看RetainedHeap的值,因為它包含了該物件自身與所有被該物件參照到的所有物件全部加總起來的記憶體使用量
===========================================================================
<MAT實際操作範例>
1.先產生一個會讓heap炸掉的程式
public class MatDemo {2.接下來就是分析這個炸掉的HeapDump啦,我常用的MAT功能是下圖裡面紅框標示的這儿個
/**
* @param args
*/
public static void main(String[] args) {
List datas = new ArrayList();
int counter = 1;
while(true){
datas.add(counter);
counter ++;
}
}
}