翻譯的官方文章 原文鏈接
當你在Android Studio中使用Android Monitor里的Memory Monitor工具監視內存使用情況時,可以把Java堆快照轉儲到Android HPROF文件中(譯者注:與標准的java hprof文件格式標准不一樣)。HPROF查看工具會列出類、類的實例和實例的引用樹,以此來幫助你跟蹤內存的使用情況,找出內存泄漏的地方。HPROF最初是由J2SE支持的一種二進制堆轉儲格式。
(本文出處:http://www.jianshu.com/p/7d958959cf33)
為什么要查看Java堆
Java堆展示如下信息:
- 按類展示實例對象的內存使用情況;
- 每次垃圾回收事件的樣本數據,不管是系統觸發還是你手動觸發的垃圾回收事件;
- 幫助分析哪些對象類型也許會導致內存泄漏。
但是,HPROF文件只是展示了某一時刻Java堆的使用情況,如果你需要了解某段時間內Java堆使用情況的, 你需要通過分析不同時間點生成的HPROF文件來找出其中的變化。HPROF分析工具可以自動分析出以下兩種類型的問題:
- 所有已經被銷毀,但是不能回收的Activity的實例;
- 重復定義的字符串。
理解HPROF文件查看工具的顯示
HPROF文件查看工具界面如下:

這個工具顯示了如下信息:
名稱 | 描述 |
---|---|
Class name | 類名 |
Total Count | 該類的實例總數 |
Heap Count | 所選擇的堆中該類的實例的數量 |
Sizeof | 單個實例所占空間大小(如果每個實例所占空間大小不一樣則顯示0) |
Shallow Size | 堆里所有實例大小總和(Heap Count * Sizeof) |
Retained Size | 該類所有實例所支配的內存大小 |
Instance | 具體的實例 |
Reference Tree | 所選實例的引用,以及指向該引用的引用。 |
Depth | GC根節點到所選實例的最短路徑的深度 |
Shallow Size | 所選實例的大小 |
Dominating Size | 所選實例所支配的內存大小 |
如果你點擊了Analyzer Tasks就會展示HPROF分析工具,界面如下圖右邊板塊:

用HPROF分析工具,可以檢測到泄漏的activities、分析出重復定義的字符串。
獲取和顯示Java堆的快照
要想查看Java堆的快照,必須要經過下面兩步:
- 在內存監視工具里顯示一個正在運行的程序
- 點擊Java堆轉儲按鈕
當轉儲成功是這個內存監視器顯示的圖標會改變。Android studio創建的HPROF文件名格式為package_yyyy.mm.dd_hh.mm.ss.hprof,使用包名和轉儲的時間來命名,例如com.android.calc_2015.11.17_14.58.48.hprof。
查看一個已經保存好的HPROF文件
堆轉儲后,Android studio會自動保存HPROF文件,以便你再次查看。用HPROF查看工具查看HPROF文件的步驟如下:
- 在主窗口中點擊Captures按鈕,或者選擇 View > Tools Windows > Captures,打開Captures窗口;
- 打開堆快照文件夾;
- 雙擊你想要查看的HPROF文件,打開HPROF文件查看工具界面;
- 選擇你想查看的堆
- App heap - 當前app使用的堆
- Image heap - 當前app在硬盤上的內存映射
- Zygote heap - zygote 復制時繼承來的庫、運行時類和常量的數據集。zygote空間設備啟動時創建,從不分配這里的空間。
- 選擇你想查看的視圖選項:
- Class List View
- Package Tree View
HPROF文件查看工具中分析數據
以下步驟是典型工作流程:
- 在HPROF文件查看工具中選擇一個類名;
- 選擇該類的一個實例;
- 查看引用樹;
- 當需要的時候可以右鍵引用樹種的條目跳轉到源碼或者實例。
HPROF文件分析工具中分析數據
用HPROF分析工具可以檢測到泄漏的activities、分析出重復定義的字串。使用HPROF文件分析工具標准步驟如下:
- 打開Captures窗口,雙擊你想要查看的HPROF文件,打開HPROF文件查看工具界面;
- 點擊Android Studio主窗口右邊欄上的Analyzer Tasks,默認HPROF文件分析工具會出現在HPROF文件查看工具的右邊。
- Analyzer Tasks列表中選擇你想分析的選項;
- 點擊開始分析的按鈕;
- 查看分析結果,點擊結果中條目可在HPROF文件分析工具中查看詳情。
數據排序
在HPROF文件查看工具中,點擊表格的頂部,可以讓表格中數據升序或者將序排列。
展示Java源碼
在HPROF文件查看工具中展示的部分項可以直接跳轉到源碼,右鍵項目點擊Jump to Source就可以在代碼編輯器中打開源碼。
HPROF文件相關操作
Android Studio中你可以重命名、定位或者刪除HPROF文件,你也可以把他轉成標准的HPROF文件格式來使用其他的分析工具分析。
重命名HPROF文件
在Android Studio中重命名的HPROF文件仍然會出現在Captures窗口中。
Captures窗口HPROF文件列表中選擇你想操作的文件,右鍵點擊Rename
定位HPROF文件
你可以快速找到Android Studio存放HPROF文件的位置。在Captures窗口HPROF文件列表中選擇你想操作的文件,右鍵點擊show in explorer,Android Studio會打開系統文件瀏覽器定位到文件存放的位置。
注意:Android Studio無法在Captures窗口顯示那些被移動別的路徑下去的HPROF文件,如果想顯示請使用File > Open。同理,不要使用系統的文件瀏覽器來重命名HPROF文件。
刪除HPROF文件
Captures窗口HPROF文件列表中選擇你想操作的文件,右鍵點擊Delete,Android Studio會從Captures窗口和硬盤上刪除文件。
將堆轉儲文件轉化成標准的HPROF文件
轉化成標准的HPROF文件后可以使用Android Studio之外的分析工具來分析。在Captures窗口HPROF文件列表中選擇你想操作的文件,右鍵點擊 Export to standard .hprof