Android記憶體分析工具集【4】Android Studio Profiler Memory
Memory Profiler是Android Profiler的一個元件, 用於幫助分析記憶體洩露和記憶體抖動的問題。
Memory Profiler的功能包括:
展示應用記憶體使用情況的實時影象、抓取記憶體的dump資訊、強制垃圾回收及追蹤記憶體分配。
2.1 開啟步驟
開啟Memory Profiler的步驟為:
依次點選Android Studio的View → Tool Windows → Android Profiler,
或直接點選工具欄Android Profiler對應的圖示
2、PC連線Android終端後,在Android Profiler對應的區域選擇接的裝置和需要監控的程序:
3、點選Android Profiler介面中MEMORY區域的任意位置,即可開啟Memory Profiler,如下圖所示:
介面介紹
開啟Memory Profiler後,主介面如下所示(為了方便,這裡直接盜取Android技術文件中的圖):
其中:
標註1對應的按鍵用於強制記憶體回收。
標註2對應的按鍵用於抓取程序記憶體的dump資訊。
標註3對應的按鍵用於記錄記憶體的分配資訊(連線Android 7.1及以下才會有此按鍵)。
初次點選時,對應統計的開始時間點;再次點選時,對應統計的結束時間點。
程序在兩個時間點之間的記憶體分配資訊,將被Memory Profiler記錄和分析。
標註4對應的區域用於縮放時間軸。
標註5對應的按鍵用於顯示實時的記憶體資料。
標註6對應的區域用於記錄事件發生的時間點及大致持續的時間(例如activity狀態改變、使用者操作介面等事件)。
標註7對應的區域用於顯示記憶體使用情況對應的時間軸(與標註6結合,就可以看出各事件帶來的記憶體變化情況)。
需要說明的是,標註7對應區域顯示的內容包括:
不同型別記憶體佔用情況對應的影象;
分配物件數量對應的短畫線;
記憶體回收事件發生的時機。
2.3 統計的資料型別及含義
Memory Profiler主要根據Android系統提供的資訊,
統計app獨自佔用記憶體,即不統計app與系統或其它app共有的記憶體。
Memory Profiler統計記憶體的種類如下圖所示:
如上圖所示,其中:
Java表示Java程式碼或Kotlin程式碼分配的記憶體;
Native表示C或C++程式碼分配的記憶體(即使App沒有native層,呼叫framework程式碼時,也有可能觸發分配native記憶體);
Graphics表示影象相關快取佇列佔用的記憶體;
Stack表示native和java佔用的棧記憶體;
Code表示程式碼、資原始檔、庫檔案等佔用的記憶體;
Others表示無法明確分類的記憶體;
Allocated表示Java或Kotlin分配物件的數量(Android8.0以下時,僅統計Memory Profiler啟動後,程序再分配的物件數量;
8.0以上時,由於系統內建了統計工具,Memory Profiler可以得到整個app啟動後分配物件的數量)。