前言
之前看過這篇部落格,《IBM使用 Eclipse Memory Analyzer 進行堆轉儲檔案分析》。是以,想使用MAT對android app的記憶體進行分析。又恰好看到這篇部落格《Android記憶體洩漏研究》,于是,我也總結一些MAT的使用。
1.在Eclipse上安裝MAT,和安裝其他插件一樣,MAT的目前位址:http://download.eclipse.org/mat/1.4/update-site/ 安裝
完成之後重新開機Eclipse即可。
2.在裝置頁面,選擇包名對應的app,如圖1.點選圖示
,等待一會,就會出現圖2的分析結果。
圖1
圖2
根據分析的結果,我們可以看出app的記憶體占用情況。點選左下角action标簽頁的Histogram,就可以通過直方圖的形式
檢視各種對象的數目,以及占用的記憶體大小。
圖 3
圖3所示的對象,最多可以顯示31個,但是我們可以根據包名和類名對其進行過濾。最最重要的時,我們可以右鍵檢視
對象被哪些對象所引用,這樣,我們就可以分析對象沒有被GC的原因,然後檢查對應的代碼。
圖 4
圖 5
可以看出,該Activity被引用的路徑。可以看出,該Activity雖然已經finish了,但是GifView仍然儲存了它的引用,導緻無法GC。
同樣的,我們可以先從暫用記憶體最多的對象分析,然後檢視它們的引用樹。注意:并不是所有暫用記憶體多的對象,都會
造成記憶體洩露。比如一副比較大的圖檔,當它需要顯示的時候,很顯然,它對應的byte數組應當出現在記憶體中。