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看出來。