Android AndroidStudio MAT LeakCanary 内存分析之 DDMS+MAT

Android AndroidStudio MAT LeakCanary 内存分析之 初识内存泄漏
http://blog.csdn.net/qq_28195645/article/details/51733342

Android AndroidStudio MAT LeakCanary 内存分析之 AndroidStudio 内存泄漏分析 Memory Monitor
http://blog.csdn.net/qq_28195645/article/details/51734506

Android AndroidStudio MAT LeakCanary 内存分析之 LeakCanary
http://blog.csdn.net/qq_28195645/article/details/51734987

Android AndroidStudio MAT LeakCanary 内存分析之 DDMS+MAT
http://blog.csdn.net/qq_28195645/article/details/51735522

下载MAT打开hprof文件

http://www.eclipse.org/mat/downloads.php

我们可以直接通过Monitor来获取hprof文件、

详见 Android AndroidStudio MAT LeakCanary 内存分析之 AndroidStudio 内存泄漏分析 Memory Monitor

这里写图片描述

我们也可以通过DDMS来获取到、

怪麻烦、还是通过上面的方法吧
这里写图片描述

按照以上三步 导出 然后通过MAT打开、会发现以下问题

Unknown HPROF Version (JAVA PROFILE 1.0.3)
这里写图片描述
原因是: android的虚拟机导出的内存文件hprof文件格式与标准的 java hprof文件格式标准不一样,根本原因两者的虚拟机不一致导致的。
只需要使用SDK中自带的转换工具转换就可以了
hprof-conv 源文件 目标文件

通过MAT打开并进行分析

这里写图片描述

在OQL(Object Query Language)窗口下输入的查询命令可以获得所有在内存中的Activities

在窗口输入

select * from instanceof android.app.Activity

按Ctrl + F5或者!按钮

这里写图片描述

这里写图片描述

在打开的新窗口中,你可以发现,你的Activity是被this 0this 0又被callback所引用,接着它又被Message中一串的next所引用,最后到主线程才结束。

任何情况下你在class中创建非静态内部类,内部类会(自动)拥有对当前类的一个强引用。

一旦你把Runnable或者Message发送到Handler中,它就会被放入LooperThread的消息队列,并且被保持引用,直到Message被处理。发送postDelayed这样的消息,你输入延迟多少秒,它就会泄露至少多少秒。而发送没有延迟的消息的话,当队列中的消息过多时,也会照成一个临时的泄露。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值