adb shell monkey -s 1 -p 包名 --throttle 100 --pct-rotation 30 -v -v -v 1000
使用DDMS 监控内存值,如果出现过大等递增异常就可能存在内存泄漏。
ddms
如何更改应用程序为 debug 模式,请查看文章,里面有详细讲解:
操作步骤看图
1. 选中要查看的进程,点击 1
2. 启动对我们需要测试的进程的检测程序,点击 2
3. 查看 VM Heap,点击 3
4. 向虚拟机请求一次 GC 操作,点击 4,请求一次之后就不用再次点击该按钮了,因为 Heap 会刷新页面,来显示当前的内存的变化。
5. 点击 5(可不点),点了能查看 allocation count per size 数据的起伏变化
6. 观察 6,data object 的 Total Size 值
分析 data object 的 Total Size 数据
1. 不断在手机上操作一个功能,如果该数据在不断地增加,每次 GC 后没有明显的回落,则判定该功能模块存在内存泄露问题。
2. 如果反复操作该功能之后,有一定范围的起伏,但是又被稳定在某一个有限的范围内,则说明代码良好,没有造成对象不被垃圾回收的情况,所以说虽然我们不断的操作会不断的生成很多对象,而在虚拟机不断的进行 GC 的过程中,这些对象都被回收了,内存占用量会会落到一个稳定的水平;
3. 如果有效内存,手机可能会出现程序被 kill,但是程序被 kill 并不能代表程序一定有内存泄露。
adb shell am dumpheap 包名 data/local/tmp/hprof.hprof
adb pull /data/local/tmp/hprof.hprof /Users/weixiangyang/Desktop/
导入 hprof1.hprof 文件
hprof-conv <原HPROF文件路径> <转换后的HPROF文件路径>
执行:hprof-conv /Users/weixiangyang/Desktop/hprof.hprof /Users/weixiangyang/Desktop/hprof1.hprof
打开 hprof1.hprof 文件,选择 Leak Suspects Report,然后 finish
hprof1.hprof 文件打开,生成一个 Overview 视图,这个图是一个概要图,显示了一些统计信息,包括整个 size 大小,class 数量,以及对象 的数量,同时还将生成一个大对象的 top 图,并线显示大对象占用内存的百分比。
点击我图上框的按钮,列出每個 class 产生了多少個实例,以及占有多大内存,所占百分比
过滤掉虚引用、弱引用、以及软引用,留下强引用,并显示 GC 跟路径:点击Path to GC Roots
或者Merge Shortest Paths to GC Roots
在成功导入 hprof1.hprof 文件后,会发现桌面生成了一大堆文件,找到.zip 文件,解压,提取出 index.html 文件给开发就行了。