美文网首页Android内存泄露
内存分析—MAT详细操作

内存分析—MAT详细操作

作者: 青禾tester | 来源:发表于2017-04-28 09:53 被阅读0次

注:

MAT查看到的内容不一定是内存泄露,需要具体分析。

使用MAT分析,最好能提前定位可能出现内存泄露的类,然后借助MAT确认是否出现泄露;优先看retained heap 较大的类分析。

提前准备:

1、下载MAT(Memory Analyzer Tool)

2、准备标准HPROF文件(Heap/CPU Profiling)

MAT下载地址:

https://eclipse.org/mat/downloads.php

如本地没有安装eclipse,下载独立包(stand-alone);

如本地安装eclipse,把插件url添加到eclipse里在线安装。

如下均使用MAT独立版操作。

1、打开MAT

界面如下:

2、打开HPROF文件

(1)file–open file–对应路径下找到hprof文件,点击打开

(2)MAT界面弹出引导,如下图

(3)选择Leak Suspects Report (当前关注点为检测是否出现泄露)

3、OQL 查找

(1)打开OQL

OQL语法,类似SQL语句

(2)查找所有的Activity实例

输入:select * from instanceof android.app.Activity

(还要其他指令用法,如怀疑某一activity可能有问题,输入:select * from com.xxx.xx.ui.MainActivity)

检索结果如下图:

4、排除非强引用

Strong Ref(强引用):通常我们编写的代码都是Strong Ref,于此对应的是强可达性,只有去掉强可达,对象才被回收。

Soft Ref(软引用):对应软可达性,只要有足够的内存,就一直保持对象,直到发现内存吃紧且没有Strong Ref时才回收对象。一般可用来实现缓存,通过java.lang.ref.SoftReference类实现。

Weak Ref(弱引用):比Soft Ref更弱,当发现不存在Strong Ref时,立刻回收对象而不必等到内存吃紧的时候。通过java.lang.ref.WeakReference和java.util.WeakHashMap类实现。

Phantom Ref(虚引用):根本不会在内存中保持任何对象,你只能使用Phantom Ref本身。一般用于在进入finalize()方法后进行特殊的清理过程,通过 java.lang.ref.PhantomReference实现。

(1)检索结果中有两个WebViewActivity,可能有泄露

(2)右键Merge Shortest Path to GC Roots,可选择exclude weak reference(排除弱引用)、或者exclude phantom/weak/soft reference(排除软/弱/虚引用)

(3)排除非强引用,结果如下

分析:最底部WebViewActivity被上一级mcontext对象持有,无法释放。(代码中查看下,这里可能是问题,也可能并不是问题)

5、其他MAT常用功能,后续补充

另一种内存泄露分析思路:

查看Dominator Tree,从Retained Heap最大的类入手分析

相关文章

  • 内存分析—MAT详细操作

    注: MAT查看到的内容不一定是内存泄露,需要具体分析。 使用MAT分析,最好能提前定位可能出现内存泄露的类,然后...

  • 使用MAT分析内存问题

    使用MAT分析内存问题 在开发过程中,我们经常需要分析应用内存,MAT(memory analyzer tool)...

  • mac 启动 mat 报错 Failed to create t

    mat 官网下载[https://www.eclipse.org/mat/] mat 用于分析 jvm 堆内存,m...

  • Eclipse-mat

    Eclipse MAT -- android 内存分析工具 资料 介绍 Eclipse MAT 名词解释 Shal...

  • LeakCanary源码分析

    作用 监控内存泄露 基于MAT(内存分析工具) 分析 如何得到未回收对象?ReferenceQueue+WeakR...

  • 内存泄露分析之as monitors、MAT、leakcanar

    内存泄露分析之as monitors、MAT、leakcanary 使用 [if !supportLists]1 ...

  • 内存分析—DDMS详细操作

    提前准备:手机上安装debug包,并打开app运行 1、打开DDMS Tools----Android----An...

  • MAT

    MAT简介 MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、...

  • MAT 的使用

    本文简述遇到内存溢出是使用mat 如何分析 1. mat 下载 下载地址 : https://www.eclips...

  • Mac OS下MAT(Memory Analyzer Tool)

    简述MAT(Memory Analyzer Tool),内存分析工具,是一款常用的JVM调优工具,对于分析内存泄漏...

网友评论

    本文标题:内存分析—MAT详细操作

    本文链接:https://www.haomeiwen.com/subject/xgsozttx.html