Android 內存使用hprof文件打開方法

與C++的內存不同,C++的內存泄露是由於分配了內存給某程序但是又沒有回收造成的。Java的內存泄露則是引用了一些垃圾對象,意思就是說程序引用了某些對象,但是又從來沒有使用過。
Jave中的引用分爲3種:
強引用:引用爲空的時候,Java的垃圾回收器會處理。一般來說自己寫的程序大部分都是強引用。
軟引用:堆內存不夠的時候,Java的垃圾回收器會處理這類引用。
弱引用:Jave的垃圾回收器每次都會回收這類引用。
如何用MAT來分析,前提是Android開發和測試的工具安裝完整,SDK,Eclipse:
1.打開Eclipse
2.選擇 Help->Install New Software;
3.在Work with中添加站點:http://download.eclipse.org/mat/1.0/update-site/(這個地址可能會變化,但是新的地址可以在官方網站上找到:http://www.eclipse.org/mat/downloads.php 
4.生成.hprof文件:插入SD卡(Android機器很多程序都需要插入SD卡),並將設備連接到PC,在Eclipse中的DDMS中選擇要測試的進程,然後點擊Update Heap 和Dump HPROF file兩個Button。
.hprof 文件會自動保存在SD卡上,把 .hprof 文件拷貝到PC上的\ android-sdk-windows\tools目錄下。這個由DDMS生成的文件不能直接在MAT打開,需要轉換。
運行cmd打開命令行,cd到\ android-sdk-windows\tools所在目錄,並輸入命令hprof-conv xxxxx.hprof yyyyy.hprof,其中xxxxx.hprof爲原始文件,yyyyy.hprof爲轉換過後的文件。轉換過後的文件自動放在android-sdk-windows\tools 目錄下。
OK,到此爲止,.hprof文件處理完畢,可以用來分析內存泄露情況了。
5.打開MAT:
在Eclipse中點擊Windows->Open Perspective->Other->Memory Analysis
6.導入.hprof文件
在MAT中點擊 File->Open File,瀏覽到剛剛轉換而得到的.hprof文件,並Cancel掉自動生成報告,點擊Dominator Tree,並按Package分組,選擇自己所定義的Package 類點右鍵,在彈出菜單中選擇List objects->With incoming references。

這時會列出所有可疑類,右鍵點擊某一項,並選擇Path to GC Roots->exclude weak/soft references,會進一步篩選出跟程序相關的所有有內存泄露的類。據此,可以追蹤到代碼中的某一個產生泄露的類。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章