美文网首页
MAT(Memory Analyzer Tool)内存泄漏检测

MAT(Memory Analyzer Tool)内存泄漏检测

作者: 东方灵龙 | 来源:发表于2019-08-06 15:40 被阅读0次

    简介

    都知道可以使用MAT来进行内存泄漏检测,可是一旦落实到hprof文件中显示出来的字段海洋,又显得无从下手。所以必须要有一目标,目标越精确越好。

    一个应用可能包含了几十个Module,上百个Activity等情况,显然丢过来一个随便抓是hprof文件来分析内存泄漏,基本不太可能;真想要进行分析需要定位单个目标,不如某个让你怀疑的Activity。

    判断内存泄漏步骤

    1. dump合理的hprof文件,并用MAT打开

    1.1. 确定怀疑目标:Main2Activity;
    1.2. 进入Main2Activity之前,dump第一个hprof文件,命名first.hprof;
    1.3. 进入Main2Activity,进行一定的操作,比如滑动之类,但是最好不要跳转离开页面;
    1.4. 关闭Main2Activity,dump第二个hprof文件,命名second.hprof;
    1.5. 使用AMT打开first.hprof和second.hprof; 如下图


    微信截图_20190806143849.png

    2. 使用Histogram和Dominator Tree对比分析这两个Hprof文件

    2.1 进入Histogram页面;


    微信截图_20190806144713.png

    2.2 点击上图第二个hprof的比较按钮,会触发 “Compare to another Heap Dump”


    微信截图_20190806145050.png

    2.3 进入比较页面,同时输入你怀疑的对象


    微信截图_20190806145544.png

    2.4 如上图,在两个hprof文件比较之后,Main2Activity多了一点内存占用,说明Main2Activty存在了内存泄漏;

    查看具体内存泄漏点

    1. 进入Dominator Tree,并用包名方式查看


      微信图片编辑_20190806150315.jpg
    2. 找到Main2Activity,然后进行Merge GC Roots操作;


      微信图片编辑_20190806152028.jpg
    3. 可以看到,在Main2Activity泄漏问题中,是因为mMessages的callback有引用到;


      微信截图_20190806152513.png
    4. 查看mMessages的引用者,利用"Show ojects by class - by incoming references"功能,可以查看引用到的对象;

      微信截图_20190806153313.png
    5. 查看引用对象列表,其实可以判断出是Handler导致的内存泄漏;


      微信截图_20190806153758.png

    以上

    相关文章

      网友评论

          本文标题:MAT(Memory Analyzer Tool)内存泄漏检测

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