MAT常见泄漏Problem Suspect解析

相关文章:
内存优化系列之Android studio导出hprof
内存分析系列之MAT的安装

本文来讲一下如何使用MAT分析并定位泄漏的项目源码位置

一.使用leak suspects report排查泄漏疑点。

1.导入.hprof文件后会有如下弹框
在这里插入图片描述
2.选择第一项查看内存泄漏疑点报告,就会自动展示出可能造成泄漏的疑点:
在这里插入图片描述
首先要清楚一点,图片中列出的Problem Suspect 1、2…只是怀疑,并不确定,我们需要查看这些怀疑项来确认是否造成了泄漏。
3.点击每个疑点底部的details链接跳转到详情,如下
在这里插入图片描述
或者
在这里插入图片描述
从详情中可以看到类似@ 0x11111111的内容,代表实例对象的编号,复制一个

4.通过编号搜索调用栈:
在这里插入图片描述
点击ok出现如下调用栈:
在这里插入图片描述
在里面查找项目里相关代码引用即可,没有引用就是项目没有造成这个怀疑的泄漏。

二.使用OQL排查

1.点击下图中1标记的图标打开OQL窗口,在2中位置输入查询的类路径,点击3中图标执行查询操作,如果有结果就会在下面出现对应类:
在这里插入图片描述
2.查看此对象被引用的位置
右键class对象,选择如下选项,exclude weak/soft 排除弱引用和软引用是因为二者都有大几率被gc回收掉。
在这里插入图片描述
出现如下调用栈:
在这里插入图片描述
即可确认对象正被引用的位置。

3.使用Histogram查找对象

1.点击下图中1位置图标会打开Histogram窗口,此窗口展示了所有在使用的class

在这里插入图片描述
可以在此界面直接输入要查询的class来查找,如下:
在这里插入图片描述
查看调用栈的方法和前面相同。

一些常见泄漏:

1.169 instances of “android.graphics.Bitmap”, loaded by “” occupy 15,296,280 (43.88%) bytes.
这个问题是因为使用Glide加载图片时Glide.with(MainActivity.this),这里应该使用ApplicationContext代替Activity的上下文,因为加载网络图片是异步的。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值