使用AndroidStudio dump heap,再用 Eclipse MAT插件分析内存泄露

1.eclipse mat插件的安装

Help->Install new software,如下图,一直下一步即可

使用AndroidStudio dump heap,再用 Eclipse MAT插件分析内存泄露

2.eclipse 打开mat,并导入\导出的文件 

file->open file 选择即可
使用AndroidStudio dump heap,再用 Eclipse MAT插件分析内存泄露

3.Android studio export heap dump

进入Android Monitor视图 
将光标定位到Android Studio的左下角,然后如下图所示弹出一个列表,选中“Android Monitor”
使用AndroidStudio dump heap,再用 Eclipse MAT插件分析内存泄露使用AndroidStudio dump heap,再用 Eclipse MAT插件分析内存泄露使用AndroidStudio dump heap,再用 Eclipse MAT插件分析内存泄露使用AndroidStudio dump heap,再用 Eclipse MAT插件分析内存泄露使用AndroidStudio dump heap,再用 Eclipse MAT插件分析内存泄露使用AndroidStudio dump heap,再用 Eclipse MAT插件分析内存泄露使用AndroidStudio dump heap,再用 Eclipse MAT插件分析内存泄露
使用AndroidStudio dump heap,再用 Eclipse MAT插件分析内存泄露

生成hprof文件

点击“Memory“Tab,进入内存分析的部分,然后点击”dump java heap for selected client”按钮,如下图所示:

使用AndroidStudio dump heap,再用 Eclipse MAT插件分析内存泄露
然后主工作区就显示一个与下图类似的页面 

 
使用AndroidStudio dump heap,再用 Eclipse MAT插件分析内存泄露

导出hprof文件 
再次将光标定位到Android Studio的右下角,这次选择”Captures“,在导出的hprof文件上右键单击并选择”Export to Stand .hprof“,就可以将导出的hprof文件进行分析了。

使用AndroidStudio dump heap,再用 Eclipse MAT插件分析内存泄露

4.OQL查找Activity内存泄露

使用AndroidStudio dump heap,再用 Eclipse MAT插件分析内存泄露

select * from instanceof android.app.Activity

使用AndroidStudio dump heap,再用 Eclipse MAT插件分析内存泄露

再右键选择Path to GCRoots

使用AndroidStudio dump heap,再用 Eclipse MAT插件分析内存泄露

gc roots 显示android源码一个比较低级的bug导致的泄露,单例引用context。

leak canary给出了解决文案

使用AndroidStudio dump heap,再用 Eclipse MAT插件分析内存泄露