Android 内存分析工具

Android SDK 提供了2个主要的剖析应用程序内存使用情况的工具:Allocation Tracker 和 heap dumps

1)Allocation Tracker是很有用的,追踪内存的分配,特别是当你想得到程序在一定的时间里内存的分配情况的一种感性认识的时候。但是它不能给你任何关于程序heap总体情况的任何 信息。


2)heap dumps,它是更强大的内存分析工具,一个heap dump就是一个程序heap的快照,它保存为一种叫做HPROF的二进制格式。Dalvik用的也是类似的格式,但是不完全一样,这里是Java 的HPROF工具 。有很多方法去生成一个运行时应用程序的heap dump,其中一种就是使用在DDMS里边的Dump HPROF file按钮,如果想产生更精确的dump数据,可以在程序中使用android.os.Debug.dumpHprofData() 方法。

分析heap dump,你可以使用一些标准的工具比如  jhat 或者 Eclipse  MATMemory Analyzer Tool 。不过,首先需要把.hprof文件从Dalvik格式转换成J2SE HPROF格式,你可以使用Android SDK提供的hprof-conv工具。


DDMS检查heap

MAT分析heap dumps

启动MAT,然后加载刚才我们生成的HPROF文件。

MAT是一个强大的工具,讲述它所有的特性超出了本文的范围,所以我只想演示一种你可以用来检测 泄露的方法:直方图(Histogram)视图。它显示了一个可以排序的类实例的列表,内容包括:shallow heap(所有实例的内存使用总和),或者retained heap(所有类实例被分配的内存总和,里面也包括他们所有引用的对象)。

如果我们按照shallow heap排序,我们可以看到byte[] 实例在顶端。自从Android 3.0(Honeycomb),Bitmap的像素数据被存储在byte数组里 (之前是被存储在Dalvik的heap里),所以基于这个对象的大小来判断,不用说它一定是我们泄露掉的bitmap

 右击byte[] 类,然后选择List Objects —> with incoming references,它会生成一个heap上的所有byte数组的列表,在列表里我们可以按照Shallow Heap的使用情况来排序。

 选择并展开一个比较大的对象,它将展示从根到这个对象的路径 —— 就是一条保证对象有效的链条。注意看,这个就是我们的bitmap缓存!

 MAT 不会明确告诉我们这就是泄露,因为它也不知道这个东西是不是程序还需要的,只有程序员知道。

在这个案例里面,缓存使用的大量的内存会影响到后面的应用程序,所以我们可以考虑限制缓存的大小。


android自带的工具:TraceView,它可以轻松把每个方法占用 CPU 时间计算出来,找到占用时间最长的方法


内存检测工具APT:提供CPU利用率实时曲线图,方便对比测试内存泄露问题


Android性能测试工具:Emmagee

  Emmagee的功能包括:

  • 检测被测应用占用的CPU使用率和总体使用量
  • 检测被测应用的内存占用量及百分比
  • 检测流量消耗

Lint 工具已经集成于 Android Studio,同样是非常强大的工具。它会给出 Layout 优化提示(既包括图片资源、layout文件,也有定义的String常量和Color常量以及Layout写法不规范),告诉你哪些资源没有被引用,Manifest文件的错误等;我主要用 lint 来哪些资源文件没有被引用到(给APK瘦身),以及部分代码不规范的地方。


Memory Monitor:查看整个app所占用的内存,以及发生GC的时刻,短时间内发生大量的GC操作是一个危险的信号(发生内存抖动)。


Hierarchy Viewer 是 Android SDK 自带的 Layout 嵌套检查工具,以可视化的布局角度直观获取 Layout 布局设计和各种属性信息,来帮助我们完成优化布局的设计。需要注意的是,出于安全考虑 Hierarchy Viewer 只能连接Android开发版手机(需要安装ViewServer)或是模拟器


我们知道Android View在绘制图形的时候主要耗时的操作就在 Measure、Layout 和 Draw 这三个过程;并且任何一个 View 绘制时间不能超过 16.7ms(每秒60帧才能保证流畅度)。

如果 UI 出现卡顿或掉帧,那么 Hierarchy Viewer 这个工具及其有用,可以分析当前 View 是哪些 View 以及是 View 的哪个过程加载延迟,通过这些信息基本可定位到局部 Code


相关文章:

Android App 性能优化实践


Android 内存分析工具 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值