android 内存分析mat,Android 性能优化之使用MAT分析内存泄露问题

androidStudio2可以用自带的内存分析工具Memory,Dump Java Heap):

1.androidStudio3用Android Profiler导出Heap Dump(.hprof文件),步骤:

(1)、在Android Profiler模块点击Dump Java Heap图标,如下图:

1529767244970082.png图1 导出heap信息:

(2)、点击Export capture to file,在Export As弹框里面输入生成的后缀为.hprof的文件,如下图:

1529767248387460.png

Export capture to file

1529767251794629.png

图3 保存文件

2.将androidStudio生成的test.hprof 文件转换为MAT可识别的文件,指令如下:

hprof-conv.exe test.hprof out.hprof

3.打开MemoryAnalyzer.exe工具,打开转换格式后的out.hprof文件,点击OQL图标(Open Object Query Language studio to execute Statements)后,在里面输入查询语句:select * from instanceof android.app.Activity(类似于 SQL语句,将当前内存中所有Activity及其子类都显示出来)或SELECT*FROMINSTANCEOF android.app.Activity aWHEREa.mDestroyed =true(这条语句会返回所有的状态为 destroyed 的Activity实例);当然可以输入其他查询语句查询你需要的信息,如输入 select * from instanceof android.view.View查询视图view相关的泄露情况;

PS:INSTANCEOF : 用来包含查询指定类的子类进行查询,否则只查询和from部分完全匹配的类;

4.在查询结果中选中需要分析的Activity对象,点击右键,选择Merge Shortest Paths to GC Roots -> exclude all phantom/weak/soft etc.references,在结果中即可以查看到该Activity被引用的情况,从而定位分析泄露原因。

PS:Merge Shortest Paths to GC Roots:可以查看一个对象到RC Roots是否存在引用链相连接, 在JAVA中是通过可达性(Reachability Analysis)来判断对象是否存活,这个算法的基本思想是通过一系列的称谓"GC Roots"的对象作为起始点,从这些节点开始向下搜索,搜索所走得路径称为引用链,当一个对象到GC Roots没有任何引用链相连则该对象被判定为可以被回收的对象,反之不能被回收;

exclude all phantom/weak/soft etc.references:排查虚引用/弱引用/软引用等,因为被虚引用/弱引用/软引用的对象可以直接被GC给回收。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值