移動APP性能測評與優化讀書筆記-1.1 內存分析

這篇文章介紹三個內存分析工具

  • DDMS,DDMS是ADT安卓開發者工具插件的一部分,可以在Eclipse 或者 Android Studio中安裝使用。它的功能比較豐富,這篇文章裏,我們用DDMS來觀察heap的內存分配情況。
  • MAT, 一個專用的內存分析工具,可以分析類和對象的內存佔用,生成各類圖表,給出內存泄漏檢測報告。
  • ADB命令,ADBAndroid Debug Bridge,簡單的說它是安卓提供的一個工具可以建立手機到電腦的連接,可以執行一些指令比如安裝刪除程序,發送短信,觀察設備內存,管理安卓設備等。


一、Android Device Monitor+DDMS

把手機連上電腦,打開開發者模式-USB調試,在Android Studio中打開下圖ADM圖標,可以看到DDMS界面




點開左邊的設備列表,可以看到APP的進程,如果看不到進程可能是因爲下面幾個問題

  • Android:debuggable="true" APP需要設爲debug模式
  • 打開開發者模式
  • 不要安裝手機助手類軟件
  • 不要同時開啓兩個連接手機的軟件

1.查看線程

選擇Threads標籤,如圖提示Thread updates no enabled,需要點擊下圖左邊Update Thread圖標





2.查看Heap狀態

提示Heap update沒有啓用,點擊下圖左邊Update Heap按鈕,再點擊右邊Cause GC,就可以看到堆內存的數據,點擊Update Heap按鈕旁邊的Dump HPROF file,可以生成HPROF文件,用MAT分析。

這個界面中可以關注Heap Allocated(程序已經分配內存)值,以及Type爲data object 的Total Size,這兩個值能較好的指示出內存是否泄漏,多次進行重複操作後,data object 的Total Size一直增大,GC後沒有明顯回落,就說明有內存泄漏的可能。





二、MAT(Memory Analyzer Tool)

在官網下載MAT,地址 https://www.eclipse.org/mat/

因爲MAT是分析JAVA內存的工具,所以需要用安卓SDK中的工具轉換一下HPROF文件格式,如圖從CMD命令行進入SDK安裝目錄/ platform-tools目錄,使用hprof-conv命令轉換格式。



此時點開TOP Consumers 會發現系統進程佔了大部分內存,如果需要進一步分析安卓的內存消耗,一個是使用OQL語句,例如

select * from instanceof android.app.Activity 

大部分內存泄漏發生在activity中,這樣能查詢出所有activity的內存情況。


另外一個方法是之前用SDK的hprof轉換時增加 -z 參數,例如

hprof- conv [-z] < infile>< outfile> -z: exclude non- app heaps, such as Zygote
可以去掉系統類的干擾。(這個方法摘抄自移動APP性能測評與優化書中,但是實際使用時發現很多對象看不懂)








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