性能優化02_MAT使用

Android性能優化彙總

下載http://eclipse.org/mat/downloads.php

1 轉化hprof文件

MAT工具全稱爲Memory Analyzer Tool,一款詳細分析Java堆內存的工具,該工具非常強大,爲了使用該工具,我們需要hprof文件。但是該文件不能直接被MAT使用,需要進行一步轉化,可以使用hprof-conv命令來轉化

  • sdk\platform-tools>hprof-conv 路徑下打開命令行
  • 執行命令:hprof-conv 源文件 輸出文件
    例如:在這裏插入圖片描述

2.MAT解析該文件,

1.打開MAT後選擇File->Open File選擇我們剛纔生成的doctorq.hprof文件
在這裏插入圖片描述
2.選擇該文件後,MAT會有幾秒種的時間解析該文件,有的hprof文件可能過大,會有更長的時間解析,解析後,展現在我們的面前的界面如下:
在這裏插入圖片描述
這是個總覽界面,會大體給出一些分析後初步的結論

Overview視圖
該視圖會首頁總結出當前這個Heap dump佔用了多大的內存,其中涉及的類有多少,對象有多少,類加載器,如果有沒有回收的對象,會有一個連接,可以直接參看(圖中的Unreachable Objects Histogram)。
比如該例子中顯示了Heap dump佔用了41M的內存,5400個類,96700個對象,6個類加載器。
然後還會有各種分類信息:
Biggest Objects by Retained Size
會列舉出Retained Size值最大的幾個值,你可以將鼠標放到餅圖中的扇葉上,可以在右側看出詳細信息:
在這裏插入圖片描述
圖中灰色區域,並不是我們需要關心的,他是除了大內存對象外的其他對象,我們需要關心的就是圖中彩色區域,比如圖中2.4M的對象,我們來看看該對象到底是啥:
在這裏插入圖片描述
該對象是一個Bitmap對象,你如果想知道該對象到底是什麼圖片,可以使用圖片工具gimp工具瀏覽該對象.
histogram視圖
histogram視圖主要是查看某個類的實例個數,比如我們在檢查內存泄漏時候,要判斷是否頻繁創建了對象,就可以來看對象的個數來看。也可以通過排序看出佔用內存大的對象:
在這裏插入圖片描述
默認是類名形式展示,你也可以選擇不同的顯示方式,有以下四種方式:
在這裏插入圖片描述
演示一下:
在這裏插入圖片描述
Dominator tree視圖

在這裏插入圖片描述
該視圖會以佔用總內存的百分比來列舉所有實例對象,注意這個地方是對象而不是類了,這個視圖是用來發現大內存對象的。這些對象都可以展開查看更詳細的信息,可以看到該對象內部包含的對象:
在這裏插入圖片描述
Leaks suspects視圖
在這裏插入圖片描述
在這裏插入圖片描述
這個視圖會展示一些可能的內存泄漏的點,比如上圖上圖顯示有3個內存泄漏可疑點,我們以Problem Suspect 1爲例來理解該報告,首先我們來看該可疑點詳細信息:
在這裏插入圖片描述
上面信息顯示ImageCahe類的一個實例0xa50819f8佔用了14.19%的內存,具體值爲5147200字節(5147200/1024/1024=4.9M),並存放在LinkedHashMap這個集合中,然後我們點擊Details跳轉到更詳細的頁面:

在這裏插入圖片描述 這樣我們就能找到在我們的app源碼中造成該泄漏可疑點的地方,很容易去定位問題.