Android studio profile查看内存泄漏

内存泄漏

首先先知道什么是内存泄漏
Android studio profile查看内存泄漏

如何知道是否发生了内存泄漏呢

Android studio profile查看内存泄漏

使用android studio的profile进行内存泄漏

Android studio profile查看内存泄漏

实际操作

官方文档

  • 里面有个拖动时间轴查看内存分配情况的操作,但是前提是,你链接的设备的系统是8.0或者以上的

通过多次开关页面,观察内存的波动,感觉total内存变化太大,貌似不太符合实际情况,所以进行Java部分的内存大小观察,发现Java部分的应该是反映了内存情况的。

比如我们要观察A页面是否发生了内存泄漏,或者你怀疑A页面发生了内存泄漏的话,可以在打开A页面之前,观察记录此时的内存的使用情况
Android studio profile查看内存泄漏
然后打开A页面进行操作,操作结束后,进行GC,,GC后再观察此时的total和Java的内存使用情况,来判断你的页面是否发生了内存泄漏

点击dump java heap图表,会对当前内存进行分析

Android studio profile查看内存泄漏
选择按包名排列,找到我们自己的包名,看里面的对象,比如此时存在A页面中的对象,说明这个对象实例还存在,我们点击它会在右边出现instance窗口,我们点击里面的实例,会在下面出现引用窗口。我们右键引用,会出现两个选项,可以帮助我们定位到代码

Android studio profile查看内存泄漏
但是这种方式感觉很不方便,不好定位。在右边打开的引用里面,可能会显示多个引用,你需要去确定是哪一个引用造成的内存泄漏

tips

认为还有一种做法,就是比如进行一次操作会产生一个对象,如果这个对象是内存泄漏的话,我们进行重复操作,那么就会产生多个对象。我们就可以根据实例的个数来判断它是否发生了泄漏

其他工具

mat

参考文章

这个文章中,提到使用hprof-conv指令,这个是sdk下的工具,在platform-tools目录下,所以我们需要进入这个目录下,才能使用这个指令。

但这个mat还是基于as的profile生成的内存情况的文件进行分析的

Leaks

  • 我们可以使用Leaks来进行内存泄漏检测,关于Leaks的使用可以先参考博文
  • 参考博文

我们操作App,在发生泄漏的时候,Leaks会进行记录,我们可以查看记录来排查内存泄漏

官方文档

看下官方的举例的图:

Android studio profile查看内存泄漏

  • 最顶部的是一个GC root
    Android studio profile查看内存泄漏
  • 最底部发生泄漏的对象
    Android studio profile查看内存泄漏
    这整个图可以看到GC root是如何到达泄漏的对象的,也就是可达性的过程