美文网首页android内存管理
Android内存泄漏快速解决——三大工具

Android内存泄漏快速解决——三大工具

作者: 朱_c713 | 来源:发表于2020-01-14 16:48 被阅读0次

在进行应用内存优化和泄漏处理的时候,有一些工具非常重要。归纳最重要的三个如下:

Memory Monitor的使用

说到app的内存分析,第一大应该学会使用的就是Memory Monitor,这是一个集成在AS(Android studio)上的一个工具。

image.png image.png
  • A:initiate GC 手动触发GC操作;
  • B:Dump Java Heap 获取当前的堆栈信息,生成一个.hprof文件,AndroidStudip会自动使用HeapViewer打开;一般用于操作之后检测内存泄漏的情况;
  • C:Start Allocation Tracking 内存分配追踪工具,用于追踪一段时间的内存分配使用情况,能够知道执行一些列操作后,有哪些对象被分配空间。一般用于追踪某项操作之后的内存分配,调整相关的方法调用来优化app性能与内存使用;
  • D:剩余可用内存;
  • E:已经使用的内存。


    新式的在profile里面

    在视图框里右键dump memory heap
    点击Memory Monitor的Dump Java Heap,会生成一个.hprof文件,AndroidStudio会自动使用HeapViewer打开。

点击沙漏部分,输入我们的包名

左面板说明:

Total Count 该类的实例个数
Heap Count 选定的Heap中实例的个数
Sizeof 每个实例占用的内存大小
Shallow Size 对象本身占用的内存
Retained Size 由于对象无法释放,被间接hold住的内存。

如上图:

  1. 通体查看,根据Allocations 列,由大到小排序,从上到下,终点关注那些非java原生的部分
  2. 点击沙漏,输入此应用包名:结合业务逻辑,如短尖头所指的ActivityAdvertising的活动存在较大嫌疑,这是一个启动页,用来展示广告,之后进入主应用,而这里有

使用MAT(Memory Analyzer 内存分析器)

MAT设计的初衷并非是分析Android应用程序的内存,主要作用是分析Java类型应用程序内存的。所以从java转过来的一批Android工程师比较熟悉这个。MAT在分析内存方面更为精细。(在传音控股的时候,公司里主要采用mat查看)
使用MAT需要抓取Hprof文件(内存快照),

1)得到Hprof文件,方法有三种:

1.使用DDMS的Dump Hprof file 来抓取。

  1. adb shell 模式下使用am dumpheap pid outfilePath 命令抓取。
  2. 往测试要(不用带大刀片子)

2)将生成的.hprof文件进行转换

抓取的文件在手机的 /data/misc文件夹下,将其转移到电脑上。
打开cmd,使用转换命令:hprof-conv 原文件路径 转换后文件路径


用转换命令转换hprof

tips: 我本人会使用同一个目录,将其后缀名添加几个字符,以示区分。

3) 用MAT工具打开转换后的文件

点击树形目录,可以看到相关引用。可以在面板中进行一下操作:

1. 搜索框里的技巧

1>在最上方的搜索框里进行搜索排除,输入的关键字,可以来自,leakcanary,因为这是我们重点关注的,也是泄露的点
2> 在这个搜索框里搜索相关的Activity,或者直接输入Activity,查看搜索结果,Objects列里面的个数,倒叙排列,看那些有多个Activity,多个Activity一般是不太正常的。
3> leankcanry 报出的泄露是关于那个类的,将类名输入进去,排除弱引用,观察对象的持有情况
4> 通体查看的时候,进行倒叙排列,输入包名,过滤。如果有使用混淆,那些特殊字符的就是我们自己的代码,可以拿到map文件,找到对应的类。

2. 鼠标操作

1>对想要查看的对象实例点击右键-> Path To Gc Roots -> exclude weak reference(排除掉软引用)。


排除软引用

2> 点击树状目录,查看引用关系

3. 对两个hprof文件进行对比

1> hprof特别对内存持续增长有大疗效。比如内存持续增长的开始结尾我们抓取了快照。在结尾的时候,我们看到那些还停留在内存中。结合我们的应用逻辑发现他是不必要的,那么就可以加以分析,一定是泄漏了。

LeakCanary

LeakCanary是square出品的一个检测内存泄漏的库,集成到App之后便无需关心,在发生内存泄漏之后会Toast、通知栏弹出等方式提示,可以指出泄漏的引用路径,而且可以抓取当前的堆栈信息供详细分析。

以上是泄漏日志的开头和结尾,结尾处,无重要信息。这里要看开头。

Android内存泄漏解决(总)

相关文章

网友评论

    本文标题:Android内存泄漏快速解决——三大工具

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