文档介绍:IT-Homer 专栏
成功是优点的发挥,失败是缺点的积累! 不为失败找理由,只为成功找
方法……
Android 内存分析工具
分类: Android 2011-12-01 15:39 2081人阅读评论(0) 收藏举报
Dalvik 虚拟机支持垃圾收集,但是这不意味着你可以不用关心内存管理。你应该格外注意移动设备的内存使用,手
机和平板的内存空间是受到限制的。
在这篇文章里面,我们来看看Android SDK里面的一些内存剖析工具(profiling tools)是如何帮助我们修整应用程
序的内存使用。
一、内存泄露
一些内存使用问题是很明显的,例如,如果在每次用户触摸屏幕的时候应用程序有内存泄露,将会有可能触发
OutOfMemoryError,最终程序崩溃。
另外一些问题却很微妙,也许只是降低应用程序和整个系统的性能(当高频率和长时间地运行垃圾收集器的时
候)。
二、内存工具
Android SDK 提供了2个主要的剖析应用程序内存使用情况的工具:Allocation Tracker 和 heap dumps
1)Allocation Tracker是很有用的,特别是当你想得到程序在一定的时间里内存的分配情况的一种感性认识的时候。
但是它不能给你任何关于程序heap总体情况的任何信息。关于Allocation Tracker的更多信息,请看文章Tracking
Memory Allocations
2)heap dumps,它是更强大的内存分析工具,一个heap dump就是一个程序heap的快照,它保存为一种叫做
HPROF的二进制格式。Dalvik用的也是类似的格式,但是不完全一样,这里是Java 的HPROF工具。有很多方法去
生成一个运行时应用程序的heap dump,其中一种就是使用在DDMS里边的Dump HPROF file按钮,如果想产生更
精确的dump数据,() 方法。
分析heap dump,你可以使用一些标准的工具比如 jhat 或者Eclipse MAT(Memory Analyzer Tool) 。不过,首先
HPROF格式,你可以使用Android SDK提供的hprof-conv工具。例如:
hprof-conv converted-
1
三、内存调试
Dalvik 运行时里,程序员不能显式地分配和释放内存,所以这里的内存泄露跟C和C++里面的不同。在你的代码
里,内存泄露就是你保留了一个并不再需要的类对象的引用,有时候仅仅一个引用就会阻碍gc对一大堆对象的回
收。
我们来过一个实际的例子,Android b Gallery sample app 。它是一个photo
gallery程序,b API的使用。(下载和编译这些代码,请看这些命令)我们会有意地
加入一个内存泄露在程序里边,然后来演示如何调试它。
想象一下我们想修改程序让它从网络下载图片,为了让它更具备灵活性,我们可以考虑实现一个缓存,保存最近查
看过的图片,