移动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性能测评与优化书中,但是实际使用时发现很多对象看不懂)








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