Android 效能測試——Heap Viewer 工具

Coffee_zq發表於2016-12-24

Android 效能測試——Heap Viewer 工具

 

Heap Viewer能做什麼?

  • 實時檢視App分配的記憶體大小和空閒記憶體大小
  • 發現Memory Leaks

 

Heap Viewer使用條件

  • 5.0以上的系統,包括5.0
  • 開發者選項可用

 

Heap Viewer啟動

可以直接在Android studio工具欄中直接點選小機器人啟動: 
這裡寫圖片描述

還可以在Android studio的選單欄中Tools也可以: 
這裡寫圖片描述

如果你不用Android studio,可以在SDK下的tools下的monitor程式開啟: 
這裡寫圖片描述

 

Heap Viewer皮膚

這裡寫圖片描述

按上圖的標記順序按下,我們就能看到記憶體的具體資料,右邊皮膚中數值會在每次GC時發生改變,包括App自動觸發或者你來手動觸發。

ok,現在來解釋下皮膚中的名詞

 

總覽

這裡寫圖片描述

列名意義
Heap Size 堆疊分配給App的記憶體大小
Allocated 已分配使用的記憶體大小
Free 空閒的記憶體大小
%Used Allocated/Heap Size,使用率
Objects 物件數量

 

詳情

這裡寫圖片描述

型別意義
free 空閒的物件
data object 資料物件,類型別物件,最主要的觀察物件
class object 類型別的引用物件
1-byte array(byte[],boolean[]) 一個位元組的陣列物件
2-byte array(short[],char[]) 兩個位元組的陣列物件
4-byte array(long[],double[]) 4個位元組的陣列物件
non-Java object 非Java物件

下面是每一個物件都有的列名含義:

列名意義
Count 數量
Total Size 總共佔用的記憶體大小
Smallest 將物件佔用記憶體的大小從小往大排,排在第一個的物件佔用記憶體大小
Largest 將物件佔用記憶體的大小從小往大排,排在最後一個的物件佔用的記憶體大小
Median 將物件佔用記憶體的大小從小往大排,拍在中間的物件佔用的記憶體大小
Average 平均值

當我們點選某一行時,可以看到如下的柱狀圖:

這裡寫圖片描述

橫座標是物件的記憶體大小,這些值隨著不同物件是不同的,縱座標是在某個記憶體大小上的物件的數量

 

Heap Viewer的使用

我們說Heap Viewer適合發現記憶體洩漏的問題,那你知道何為記憶體洩漏麼?

 

記憶體洩漏

英文名:Memory Leaks 
標準解釋:無用的單純,但是還是沒GC ROOT引用的記憶體 
通俗解釋:該死不死的記憶體

 

檢測

那麼如何檢測呢?Heap Viewer中的數值會自動在每次發生GC時會自動更新,那麼我們是等著他自己GC麼?小弟不才,剛開始我就是這麼一直等啊等,由於GC的時機是系統把握的,所以很不好把握,既然我們是來看記憶體洩漏,那麼我們在需要檢測記憶體洩漏的用例執行過後,手動GC下,然後觀察data object一欄的total size(也可以觀察Heap Size/Allocated記憶體的情況),看看記憶體是不是會回到一個穩定值,多次操作後,只要記憶體是穩定在某個值,那麼說明沒有記憶體溢位的,如果發現記憶體在每次GC後,都在增長,不管是慢增長還是快速增長,都說明有記憶體洩漏的可能性。

 

例項

先來看3個圖: 
1.剛開啟首頁,手動GC一下: 
這裡寫圖片描述 
2.首頁到詳情頁10遍,最後回到首頁,手動GC一下,直到數值不再變化: 
這裡寫圖片描述 
3.首頁到詳情頁10遍,最後回到首頁,手動GC一下: 
這裡寫圖片描述 
data object一欄看到該型別的數值會在不斷增長,可能發生了記憶體洩漏,而我們也可以從上面三個圖的標紅部分來看,Allocated分別增加了2.418M1.084M,而且你繼續這麼操作下去,記憶體依然是增長的趨勢

 

補充

Heap Viewer不光可以用來檢測是否有記憶體洩漏,對於記憶體抖動,我們也可以用該工具檢測,因為記憶體抖動的時候,會頻繁發生GC,這個時候我們只需要開啟Heap Viewer,觀察資料的變化,如果發生記憶體抖動,會觀察到資料在段時間內頻繁更新。

 
 

相關文章