功能——Cpu 实时监控工具,可运行在模拟器、真机上。
优点:实时、可与应用程序同时在前台展现
可在屏幕底部查看,仅占一个像素,application前台运行,Rd或者qa可以在调试、测试过程中实时看到设备cpu占用率,更容易定位问题所在,可配合自动化工具使用。
功能:内存监控
实时监控+数据存储
优点:实时,曲线图
实时展现applition内存占用,并将数据以excel形式备份。
可配合monkey或者自动化工具使用。
缺点:数据存储格式不利于展现。
DDMS——内存泄露检测
功能:内存检测工具。使用DDMS的Heap视图工具可以很方便的确认我们的程序是否存在内存泄漏的可能性
启动DDMS
1、启动eclipse后,切换到DDMS透视图,并确认Devices视图、Heap视图都是打开的;
2、点击选中想要监测的进程——>选中视图页面上方的"update heap"图标
3、点击Heap视图中的“Cause GC”按钮。此时在Heap视图中就会看到当前选中的进程的内存使用量的详细情况
点击“start gc”后无需重复点击刷新,heap视图会定时刷新。
Heap视图中部有一个Type叫做data object,即数据对象,也就是我们的程序中大量存在的类类型的对象。在data object一行中有一列是“Total Size”,其值就是当前进程中所有Java数据对象的内存总量,一般情况下,这个值的大小决定了是否会有内存泄漏。可以这样判断:
a) 不断的操作当前应用,同时注意观察data object的Total Size值;
b) 正常情况下Total Size值都会稳定在一个有限的范围内,也就是说由于程序中的的代码良好,没有造成对象不被垃圾回收的情况,所以说虽然我们不断的操作会不断的生成很多对象,而在虚拟机不断的进行GC的过程中,这些对象都被回收了,内存占用量会会落到一个稳定的水平;
c) 反之如果代码中存在没有释放对象引用的情况,则data object的Total Size值在每次GC后不会有明显的回落,随着操作次数的增多Total Size的值会越来越大。
注意:ddms只可以初步判断可能存在内存泄露,哪里存在内存泄露是无从分析的,只能借助下面工具——MAT.
Mat是一个eclipse plugin(http://download.eclipse.org/mat/1.1/update-site/),也有单独的rcp客户端。以下示例环境——mat plugin+eclipse
启动MAT,加载生成的hprof文件。即点击DDMS工具条上面的Dump hprof文件
展示类实例的直方图(未释放的类实例)及说明(为什么没有释放)
在overview中中查看domintor tree,查看未释放、可排序的、占用内存最大的一些对象列表。
选中列表展开比较大的对象,右键List Objects > with incoming references。它会生成一个heap上的所有byte数组的列表,在列表里,我们可以按照Shallow Heap的使用情况来排序;
右键path to GC Roots>exclude weak/soft references,它将展示从根到这个对象的路径--就是一条保证对象有效的链条。
根据以上路径定位内存泄露的位置。
补充:
Shallow size就是对象本身占用内存的大小,不包含对其他对象的引用,也就是对象头加成员变量(不是成员变量的值)的总和
retained size:该对象本身的shallow size加上它直接引用或者间接引用的对象的shallow size,即该对象被gc回收,所能回收的内存总和。
AndroidPermanceTest+Monkey
http://wiki.babel.baidu.com/twiki/bin/view/Com/Test/Android%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7
结语
以上工具均可配合monkey、自动化用例使用。