【学习笔记】APP性能---win10使用Memory Analyzer Tool(MAT)分析APP内存泄露问题

1、下载MAT

MAT是使用非常广泛的Java内存分析工具,功能强大;

(1)官网下载:Eclipse Memory Analyzer Open Source Project | The Eclipse Foundation

(2)解压后双击运行

2、获取HPROF文件

(1)使用Android Device Monitor获取HPROF文件

cmd输入monitor启动Android Device Monitor;(手机打开开发者选项和USB调试模式,和PC连接)

得到HPROF文件:

使用AndroidSDK自带的hprof-conv转换,转换后的文件才可以用MAT打开:

//hprof-conv 位置在sdk/platform-tools/hprof-conv
hprof-conv xxx.xxx.xxx.hprof xxx.xxx.xxx.hprof

(2)使用AndroidStudio获取HPROF文件

------待补充------

3、MAT打开分析HPROF文件

上图为使用Top Consumers统计的使用情况;

4、MAT在分析Android应用时的常用技巧------去除系统资源类内存的干扰

上图统计结果,系统的资源类占据了很大一部分的内存,而其余的前几名往往也是系统类。这是由于从虚拟机角度不会区分系统框架和应用自身的对象;

(1)为了去除这部分对分析的干扰,在使用AndroidSDK提供的hprof-conv转换时需要增加一个参数:

hprof-conv  -z  befroe.hprof  after.hprof
//说明
hprof-conv [-z]  <infile>  <outfile>
-z:exclude non-app heaps,such as Zygote

(2)OQL查询--另一种去除系统资源类干扰的方法

JVM 对象查询语言(OQL);

如果hprof文件时经过转换的,可以在数据中寻找应用的Application类对象,将对象地址转换为十进制后输入以下查询语句:

select * from instance of java.lang.object s where s.@objectAddress > 1107296256

使用-z参数转换或OQL查询得到的对象集合就只包含应用代码分配的部分了,在此基础上使用MAT的Top Consumers功能就能得到比较准确的结果,如下图所示:

没有了系统类所占内存的干扰,只有应用自身代码创建的对象,对于发现内存问题比较有帮助。

对于一般的内存泄露类问题,使用以上方法后通过MAT提供的分析报告就很快识别出来。

内存问题常常是加载后忘了释放Bitmap(一直没有销毁而存在于ImageLoader里,使用一段时间后ImageLoader会越来越庞大)、临时生成的byte数组和文件缓冲区、包含Handler的Activity等。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值