天天看點

記憶體洩漏檢測實戰(1)利用Android Studio的Android Profiler、MAT對Android進行記憶體洩漏檢測

目錄

  • 利用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:

  1. 點選 View > Tool Windows > Android Profiler(也可以點選工具欄中的 Android Profiler )。
  2. 從 Android Profiler 工具欄中選擇您想要分析的裝置和應用程序。 如果您通過 USB 連接配接了某個裝置但該裝置未在裝置清單中列出,請確定您已啟用 USB 調試。
  3. 點選 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指定應用的記憶體堆

記憶體洩漏檢測實戰(1)利用Android Studio的Android Profiler、MAT對Android進行記憶體洩漏檢測

step2,重複操作以後,進行GC操作,dump指定應用的記憶體堆并儲存起來

記憶體洩漏檢測實戰(1)利用Android Studio的Android Profiler、MAT對Android進行記憶體洩漏檢測

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,在這個例子中,說明記憶體洩漏了

記憶體洩漏檢測實戰(1)利用Android Studio的Android Profiler、MAT對Android進行記憶體洩漏檢測

step5,修改bug,重複疊代

重新重複step1-step4,如果相應Activity的數目正常了,則可以認為記憶體洩漏已經修複

總結

在以前知識準備(Android記憶體管理和Android記憶體分析)的基礎上,再做了一次記憶體洩漏檢測的實戰來進行應用記憶體的分析,對應的Demo位址在https://github.com/shuyinghuang/AndroidMemoryLeakDemo1