記錄一次Android內存分析的流程

1.分析泄漏的由來

我司的測試部門在平常的自動化測試中,發現了一些內存泄漏的點。其中許多泄漏的緣由一眼就能看出,但是也有一些真的發現不了。如圖android

default
根據這個調用鏈看不出具體是哪裏持有的泄漏致使的,太抽象了,感受中間少了什麼。沒辦法,只能本身一步步還原分析,查找內存泄漏的具體緣由。(內存泄漏測試可以使用APM相關插件)

2.使用Memory Profiler 查看Java堆和內存分配

步驟1:首先打開Android Studio,點擊頂部Toolbar 的Profile按鈕bash

profileonandroidstudiotoolbar
步驟2:而後在Profile面板的左上角選擇要監控的進程
sessionsinprofile
選好之後會展現如圖所示的Profile面板,其中包括內存,CPU,網絡等實時監控的內容。
memoryinprofile
步驟3:因爲此次主要是查看內存泄漏,因此單擊Memory,查看Memory相關的實時監控。這個時候會看到如圖所示的界面。
memory-profiler-callouts_2x
簡單介紹以下:

指示1.用於強制執行垃圾回收 Event 的按鈕。(相似人工執行gc)網絡

指示2.用於捕獲堆轉儲的按鈕(堆轉儲顯示在您捕獲堆轉儲時您的應用中哪些對象正在使用內存)這個也是本次重點要用的按鈕session

指示3.用於記錄內存分配狀況的按鈕。 此按鈕僅在鏈接至運行 Android 7.1 或更低版本的設備時纔會顯示。eclipse

指示4.用於放大/縮小時間線的按鈕。工具

指示5.用於跳轉至實時內存數據的按鈕。測試

指示6.Event 時間線,其顯示 Activity 狀態、用戶輸入 Event 和屏幕旋轉 Event。spa

指示7.內存使用量時間線插件

步驟4:根據內存泄漏的狀況,執行對應的操做。正常狀況操做完成之後,相應對象的GC Root鏈已經沒有了。 步驟5:點擊按鈕2,捕獲堆轉儲。而後右鍵點擊對應存儲的對象,導出相應HPROF格式文件。如圖所示 3d

exportheapdump

若是須要除Android Studio的其它HPROF分析器查看文件(我選擇的是Memory Analyzer(MAT),下載地址爲:www.eclipse.org/mat/), 首先須要將 HPROF 文件從 Android 格式轉換爲 Java SE HPROF 格式。 您 可使用 android_sdk/platform-tools/ 目錄中提供的 hprof-conv 工具執行此操做。 運行包括如下兩個參數的 hprof-conv 命令:heap-original.hprof(原始 HPROF 文件)和heap-converted.hprof(轉換後 HPROF 文件)。 例如:

hprof-conv heap-original.hprof heap-converted.hprof
複製代碼

步驟6:轉換完格式之後在mat應用中打開對應的文件,同時選擇Histogram按鈕。

histogram

搜索你想查看的類,而後在對應的類中右擊,選擇Merge shortest Paths to Gc roots 再選擇 exclude phantom/weak refrecnce 可看到如圖所示的調用鏈,有了這個解決問題就輕鬆了。

gc root

自此,大概的一次Android內存泄漏分析流程結束,寫下這個也是爲了以後再分析可用。

參考連接:developer.android.com/studio/prof…
相關文章
相關標籤/搜索