1. 程式人生 > >記憶體洩漏檢測實戰(一)

記憶體洩漏檢測實戰(一)

利用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指定應用的記憶體堆

Picture of Dumping Memory Profiler

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

saving heap

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

step5,修改bug,重複迭代

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

總結