adb查找内存泄露

在网上看到大部分都是集成LeakCanary来查找内存泄露,这种方式有代码的入侵性,个人不太喜欢。
所以今天跟大家分享一下我经常使用的方式来查找内存泄露

正文开始

1.打开app跑monkey -v 后面都数据随便自己设定,数值越大,跑的时间越久
adb shell monkey -p 包名 -v 100000
2.当monkey结束后,点返回键一直退回到app主页面
//可以等待几秒钟后执行多次,然后看Activities的数据变化
adb shell dumpsys meminfo 包名
图1.jpg

执行完后看到一连串到数据,图1 只是截了其中一部分图,因为我们这里只要关注 Objects中的Activities 当它数值大于1的时候,大概就发生了Activity的内存泄露,

3.当内存发生了泄露,我们使用命令获取app当前的内存文件
adb shell am dumpheap 包名 文件路径
//例如:adb shell am dumpheap com.example.paginglist /data/anr/xyz.hprof

//这个Android的与标准的java hprof文件格式标准不一样,我们需要转换一下
//通过platform-tools 中的hprof-conv 把刚才生成的hprof文件转换成mat可识别的文件
hprof-conv  old.hprof  new.hprof

4.后续我们只需要把转换后的new.hprof 放入MAT进行内存分析。关于MAT的使用网上有很多的使用教程,就不重复了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容