Android内存泄漏排查

工具:MAT+Android Studio Profiler 

Profiler主要负责捕获内存快照,MAT主要负责引用分析。

一些直观的内存泄漏用Profiler就好,当然这个需要自己去定位内存泄漏代码。Profiler适合用于比较复杂的引用,不易推测出泄漏的地方,MAT能很好地展示引用链,帮助排查泄漏。

使用方法:

结合自己的应用来说,我在MainActivity中借助Profiler手动重复GC若干次,然后点击dump java heap生成内存快照,然后按照包的形式进行显示,很显然SplashActivity内存没有被释放掉,我推测是加载广告造成的。

为了确定此泄露是加载广告造成的,试着用MAT分析引用。

 

Android内存泄漏排查_第1张图片

Leak suspects 是MAT推测的内存泄漏的地方。

点开第一个泄漏,然后找到Accumulated Objects in Dominator Tree ----------> by incoming references ------>mearge shortest paths to gc roots ------------>最后选择排除弱引用、虚引用,选择结果如下:

Android内存泄漏排查_第2张图片

很明显是MyAdvertisement引用了MainActivity。解决完此问题又截取一次内存快照如下:

在下面MAT的内存泄漏推测中都没有找到以上内存泄漏说明问题已经解决。

Android内存泄漏排查_第3张图片

 

 

 

你可能感兴趣的:(android,高级)