MAT使用
下載:http://eclipse.org/mat/downloads.php
MAT工具全稱為Memory Analyzer Tool玉转,一款詳細(xì)分析Java堆內(nèi)存的工具,該工具非常強(qiáng)大皆警,為了使用該工具,我們需要hprof文件。但是該文件不能直接被MAT使用,需要進(jìn)行一步轉(zhuǎn)化智绸,可以使用hprof-conv命令來(lái)轉(zhuǎn)化,但是Android Studio可以直接轉(zhuǎn)化,轉(zhuǎn)化方法如下:
1.選擇一個(gè)hprof文件访忿,點(diǎn)擊右鍵選擇Export to standard .hprof選項(xiàng)瞧栗。
image.png
2.填寫更改后的文件名和路徑:
3點(diǎn)擊OK按鈕后,MAT工具所需的文件就生成了海铆,下面我們用MAT來(lái)打開該工具:
3.1.打開MAT后選擇File->Open File選擇我們剛才生成的doctorq.hprof文件
3.2.選擇該文件后迹恐,MAT會(huì)有幾秒種的時(shí)間解析該文件,有的hprof文件可能過(guò)大卧斟,會(huì)有更長(zhǎng)的時(shí)間解析殴边,解析后,展現(xiàn)在我們的面前的界面如下:
這是個(gè)總覽界面珍语,會(huì)大體給出一些分析后初步的結(jié)論
Overview視圖
該視圖會(huì)首頁(yè)總結(jié)出當(dāng)前這個(gè)Heap dump占用了多大的內(nèi)存锤岸,其中涉及的類有多少,對(duì)象有多少板乙,類加載器是偷,如果有沒有回收的對(duì)象,會(huì)有一個(gè)連接募逞,可以直接參看(圖中的Unreachable Objects Histogram)蛋铆。 比如該例子中顯示了Heap dump占用了41M的內(nèi)存,5400個(gè)類放接,96700個(gè)對(duì)象戒职,6個(gè)類加載器。 然后還會(huì)有各種分類信息:
Biggest Objects by Retained Size
會(huì)列舉出Retained Size值最大的幾個(gè)值透乾,你可以將鼠標(biāo)放到餅圖中的扇葉上,可以在右側(cè)看出詳細(xì)信息:
圖中灰色區(qū)域磕秤,并不是我們需要關(guān)心的乳乌,他是除了大內(nèi)存對(duì)象外的其他對(duì)象,我們需要關(guān)心的就是圖中彩色區(qū)域市咆,比如圖中2.4M的對(duì)象汉操,我們來(lái)看看該對(duì)象到底是啥:
該對(duì)象是一個(gè)Bitmap對(duì)象,你如果想知道該對(duì)象到底是什么圖片蒙兰,可以使用圖片工具gimp工具瀏覽該對(duì)象.
histogram視圖
histogram視圖主要是查看某個(gè)類的實(shí)例個(gè)數(shù)磷瘤,比如我們?cè)跈z查內(nèi)存泄漏時(shí)候芒篷,要判斷是否頻繁創(chuàng)建了對(duì)象,就可以來(lái)看對(duì)象的個(gè)數(shù)來(lái)看采缚。也可以通過(guò)排序看出占用內(nèi)存大的對(duì)象:
默認(rèn)是類名形式展示针炉,你也可以選擇不同的顯示方式,有以下四種方式:
下面來(lái)演示一下:
Dominator tree視圖
該視圖會(huì)以占用總內(nèi)存的百分比來(lái)列舉所有實(shí)例對(duì)象扳抽,注意這個(gè)地方是對(duì)象而不是類了篡帕,這個(gè)視圖是用來(lái)發(fā)現(xiàn)大內(nèi)存對(duì)象的。這些對(duì)象都可以展開查看更詳細(xì)的信息贸呢,可以看到該對(duì)象內(nèi)部包含的對(duì)象:
Leaks suspects視圖
這個(gè)視圖會(huì)展示一些可能的內(nèi)存泄漏的點(diǎn)镰烧,比如上圖上圖顯示有3個(gè)內(nèi)存泄漏可疑點(diǎn),我們以Problem Suspect 1為例來(lái)理解該報(bào)告楞陷,首先我們來(lái)看該可疑點(diǎn)詳細(xì)信息:
上面信息顯示ImageCahe類的一個(gè)實(shí)例0xa50819f8占用了14.19%的內(nèi)存怔鳖,具體值為5147200字節(jié)(5147200/1024/1024=4.9M),并存放在LinkedHashMap這個(gè)集合中,然后我們點(diǎn)擊Details跳轉(zhuǎn)到更詳細(xì)的頁(yè)面:
這樣我們就能找到在我們的app源碼中造成該泄漏可疑點(diǎn)的地方固蛾,很容易去定位問題.