Android内存泄漏测试方法

方法一:LeakCanary

1、在build.gradle里导入 implementation 'com.squareup.leakcanary:leakcanary-android:1.5.4'

2、在application中初始化LeakCanary

private void initLeakCanary() {

if (LeakCanary.isInAnalyzerProcess(this)) {

return;

}

LeakCanary.install(this);

}

3、使用APP时,当出现内存泄漏时,会弹出相应的提示,出现提示时打开Leaks可查看到内存泄漏的堆栈信息


方法二:DDMS+MAT

1、安装Android SDK,使用Android SDK自带的一个工具monitor,运行monitor,然后进入 DDMS管理界面,连接手机,按下图执行操作获取 hprof文件

(注:如果未出现连接设备,请查看是否打开USB调试模式)

2、转换 hprof文件,DDMS Dump出的文件要经过转换才能被 MAT识别,Android SDK提供了这个工具 hprof-conv,把步骤一保存的内存文件通过hprof-conv转换,执行命令hprof-conv xxx-a.hprof xxx-b.hprof

3、安装内存分析工具Memory Analyzer Tool,用MAT打开转换后的 hprof文件 

,File->Open Heap Dump,打开后如图

 4、Histogram查询,点击 Actions下的 Histogram项将得到 Histogram结果:

5、按类名将所有的实例对象列出来,可以点击表头进行排序,在表的第一行可以输入正则表达式来匹配结果 :

6、在某一项上右键打开菜单选择list objects ->with incoming refs将列出该类的实例:

7、它展示了对象间的引用关系,快速找出某个实例没被释放的原因,可以右健Path to GC Roots-->exclue all phantom/weak/soft etc.reference :

8、用这个方法可以快速找到某个对象的GC Root,一个存在 GC Root的对象是不会被 GC回收掉的

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容