目錄
- 利用Android Studio的Android Profiler、MAT對Android進行記憶體洩漏檢測
-
- 前言
- Android Profiler & Memory Profiler & MAT
- step1,利用Memory Profiler dump指定應用的記憶體堆
- step2,重複操作以後,進行GC操作,dump指定應用的記憶體堆并儲存起來
- step3,convert java heap to mat format
- step4,MAT打開和檢視記憶體堆檔案
- step5,修改bug,重複疊代
- 總結
利用Android Studio的Android Profiler、MAT對Android進行記憶體洩漏檢測
前言
在之前的兩篇文章中,Android記憶體管理&MemoeryLeak&OOM分析 和 Android記憶體優化技巧,已經覆寫了Android上面的記憶體管理與優化相關的一些基礎知識。
現在簡單溫習一下用Android Profiler 和 MAT 對 Android進行記憶體洩漏檢測
Android Profiler & Memory Profiler & MAT
Android Profiler是 Android Studio 3.0中引入的,前身是ddms和android monitor,Android Profiler的基本功能在前身中也有展現。Memory Profiler 是 Android Profiler 中的一個元件,可幫助識别導緻應用卡頓、當機甚至崩潰的記憶體洩漏和流失。 它顯示一個應用記憶體使用量的實時圖表,讓您可以捕獲堆轉儲、強制執行垃圾回收以及跟蹤記憶體配置設定。
按以下步驟來打開 Memory Profiler:
- 點選 View > Tool Windows > Android Profiler(也可以點選工具欄中的 Android Profiler )。
- 從 Android Profiler 工具欄中選擇您想要分析的裝置和應用程序。 如果您通過 USB 連接配接了某個裝置但該裝置未在裝置清單中列出,請確定您已啟用 USB 調試。
- 點選 memory時間線中的任意位置可打開 Memory Profiler。
MAT (Memory Analyzer Tool) 最早是Eclipse的一個插件。The Eclipse Memory Analyzer is a fast and feature-rich Java heap analyzer that helps you find memory leaks and reduce memory consumption(翻譯一下,MAT是一個又快,同時功能豐富的java堆分析器,可以幫助查找記憶體洩漏和減少記憶體消耗),從https://www.eclipse.org/mat/downloads.php處下載下傳
step1,利用Memory Profiler dump指定應用的記憶體堆
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2Lc1zYtJGaWhUY6p1MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2LcRHelR3LcJzLctmch1mclRXY39DM5QjN0MzMwIDMyATM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
step2,重複操作以後,進行GC操作,dump指定應用的記憶體堆并儲存起來
step3,convert java heap to mat format
/Users/xxx/Library/Android/sdk/platform-tools/hprof-conv heap_rotateonly_gc.hprof heap_rotateonly_gc_mat.hprof
step4,MAT打開和檢視記憶體堆檔案
在xxx界面開始查詢對應的Activity,以及該Activity在記憶體中的數目是5,在這個例子中,說明記憶體洩漏了
step5,修改bug,重複疊代
重新重複step1-step4,如果相應Activity的數目正常了,則可以認為記憶體洩漏已經修複
總結
在以前知識準備(Android記憶體管理和Android記憶體分析)的基礎上,再做了一次記憶體洩漏檢測的實戰來進行應用記憶體的分析,對應的Demo位址在https://github.com/shuyinghuang/AndroidMemoryLeakDemo1