android APP 内存泄漏检测工具—Profiler+MAT

内存泄漏(Memory Leak):在程序中申请了一块内存,由于某种原因一直未释放,造成系统内存的浪费,如果不断的申请还会导致内存溢出(Out Of Memory,OOM)

介于项目客观条件限制,故使用**Android Studio的 Profiler和MAT(Memory Analyzer Tools)**来分析内存泄漏问题。
在真机上检测内存泄漏,需要打开ADB调试

一、Android Profiler

1、打开方式: View > Tool Windows > Profiler
2、启动方式:点击 + 加载对应app进程

在这里插入图片描述
3、添加设备后,运行Profiler

在这里插入图片描述
4、点击MEMORY后,显示如下界面
1)、下图中1的位置:Dump java heap
2)、下图中2的位置:stop the current profiling session

在这里插入图片描述
5、点击Dump java head 后,开始记录,生成Heap Dump

在这里插入图片描述
6、右键Heap Dump(上图中2的位置)——Export——选择位置进行保存

在这里插入图片描述

二、MAT(Memory Analyzer Tools)

1、MAT工具下载地址 (https://www.eclipse.org/mat/)

特别需要强调
保存后的文件通过sdk里的hprof-conv.exe转换格式,否则用MAT软件无法打开,弹出如下的提示

在这里插入图片描述
hprof-conv.exe所在路径如下:

在这里插入图片描述
通过CMD进行转换~

在这里插入图片描述

2、打开MAT工具

在这里插入图片描述
3、打开转换后的 Heap Dump文件
File——Open Heap Dump…——选择文件——打开——Finish

在这里插入图片描述在这里插入图片描述
4、create a histogram(直方图)——点击图中圆圈位置

在这里插入图片描述生成的Histogram中:

Shallow Heap :指对象本身占据的内存大小(不包含其引用的对象),对于常规对象(非数组)指的是其成员变量的数量及类型;对于数组类型的对象指的是数组元素大小的总和,包含数组类型及数组长度。

Retained Heap:当前对象的大小+当前对象可直接或间接引用到的对象的大小的总和,并且不包含被GC Roots 直接或间接引用的对象

在这里插入图片描述在下图圆圈位置输入Fragment\Activity ,进而排查泄漏位置
在这里插入图片描述
右键其中一个
1)、Merge Shortest Paths to GC Roots ——>exclude all weak/soft references :该对象到GC Roots节点的最短引用路径,去除所有弱引用;
2)、Merge Shortest Paths to GC Roots——>With all references :从该对象到GC Roots节点最短引用路径,包含所有引用类型
3)、Merge Shortest Paths to GC Roots——>exclude all phantom/weak/soft etc.references :排除软弱引用,查看强引用

结合代码,分析对应界面有哪些泄漏
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值