Android 性能測試——Memory Monitor 工具
Memory Monitor能做什么?
- 實時查看App的內存分配情況
- 快速判斷App是否由於GC操作造成卡頓
- 快速判斷App的Crash是否是因為超出了內存
Memory Monitor使用准備
- 開發者選項可用
- USB調試開啟
備注:Android Studio的Enable ADB Integration
勾選(Tools/Android下)。
Memory Monitor面板
首先執行adb devices
來確保設備可用,然后啟動Android Studio
,選擇一個Android項目或者新建一個項目進入主面板,如果你有你的待測App的源碼,那么最好進入你自己的App項目中,這樣方便調試和定位問題。進入項目后,可以看到Android Studio的主面板左下角有一個Android
標簽:
點擊該標簽打開Android
面板,如下圖所示:
A:設備選擇
B:可監控的App選擇
C:內存的實時數據
重點來看C區域,橫坐標記錄從采集開始點到目前已經過去的時間,縱坐標是分配給App使用的內存總量[Allocated+Free],藍色區域表示已分配[Allocated]使用的的,灰色區域表示空閑[Free]未使用的。在坐標軸的右邊可以看見具體數值。
GC
GC就是垃圾回收的意思,我們可以從Memory monitor看到何時發生了GC event,當一個內存短時間內發生掉落,我們可以認為發生了GC操作。你也可以手動觸發GC,下圖中的小車子就是觸發GC的按鈕,一旦按下就會回收那些沒被引用的對象(這個地方不能說沒用的對象,因為沒用的對象有可能是內存泄漏時的對象,后期會來研究):
Memory Monitor可以發現的問題
Memory Monitor工具為監控工具,是一種發現型或者說監控性質的工具,比如醫生的四大技能[望聞問切],[望]是第一步。這里的Memory Monitor就是一種[望]的工具,目前我主要用它來看下面幾個內存問題:
1.發現內存抖動的場景
2.發現大內存對象分配的場景
3.發現內存不斷增長的場景
4.確定卡頓問題是否因為執行了GC操作
案例分析
上面的第一段標記顯示內存突然增加了7M,我們也能看的很清楚,所以這個點我們要去定位了一下問題在哪里,是Bitmap還是什么原因造成的,第二段標記是內存抖動,很明顯在很短的時間了發生了多次的內存分配和釋放。而且在發生內存抖動的時候,也能感覺到App的卡頓,可以看出來是由於執行了GC操作造成的。
內存的不斷增加通過Memory monitor很容易看出來,藍色的曲線是一路高歌猛進的,一看便知。
關於內存泄漏的問題
Memory Monitor也可以歸納到用於檢測內存泄漏的工具,但是我沒這么做,因為在實際過程中,當泄漏的點每一次很小的時候,你很難發現,沒有Heap Viewer好使。如果泄漏的對象占用內存大的話,也能通過Memory Monitor看出來。