美文网首页
Android内存工具使用简介

Android内存工具使用简介

作者: longshuai | 来源:发表于2018-05-24 00:00 被阅读0次

    Android内存工具总结1

    MAT查看内存占用,
    Memory Monitor跟踪整个App的内存变化情况,
    Heap Viewer查看当前内存快照,
    Allocation Tracker追踪内存对象的来源,以及利用崩溃上报平台从多个方面对App内存进行监控和优化

    MAT使用:
    一、AS的Android Monitor查找内存溢出
    1、在手机上运行程序,打开AS的 Minotor 界面 查看Memory 图像
    2、小卡车图标(Initiate GC) 可以触发一次 GC
    3、点击,点击,点击
    4、点击图标“Dump Java Head”,然后等待hprof被打开
    5、看包名下 Retained Heap
    占用情况,点击右边的“instance”查看下面的“Reference Tree”
    显示 它的GC Roots的树关系图 ,查看关系图就可以找出发生内存泄漏的位置(不是太好看出来)

    认识两个词Shallow Heap/Retained Heap
    Shallow Heap

    Shallow size就是对象本身占用内存的大小,不包含其引用的对象内存,实际分析中作用不大。在堆上,看起来是一堆原生的byte[], char[], int[],对象本身的内存都很小。

    Retained Heap

    Retained size是该对象自己的shallow size,加上从该对象能直接或间接访问到对象的shallow size之和。换句话说,retained size是该对象被GC之后所能回收到内存的总和。
    RetainedHeap可以更精确的反映一个对象实际占用的大小(因为如果该对象释放,retained heap都可以被释放)。

    depth 深度;
    Shallow Size 对象本身内存大小;
    Dominating Size 管辖的内存大小;

    二、AS:Tools-->Android Device Monitor
    1、 打开Android Device Monitor,先选中你要检测的应用的包名
    2、点击绿色按钮(“Update Heap”)之后操作我们的app
    3、点击图标"Dump HPROF File"就可导出hprof文件
    4、可以把hprof直接拖进as打开分析 也可以用mat(MemoryAnalyzer.exe)工具进行分析

    as分析:
    点击了Analyzer Tasks就会展示HPROF分析工具
    可以检测到泄漏的activities、分析出重复定义的字符串。
    点击右侧的“analyzer tasker”就可以查看到那些activity泄露
    复杂的泄露还是要mat来分析,as不好分析

    MAT分析:
    Step1:如果用MemoryAnalyzer.exe分析,需要转换下:
    MAT是用来分析java程序的hprof文件的 与Android导出的hprof有一定的格式区别,因此我们需要把导出的hprof文件转换一下,sdk中提供给我们转换的工具 hprof-conv.exe (在sdk的platform-tools目录下)
    hprof-conv 命令 这样使用
    hprof-conv 源文件 输出文件
    比如 hprof-conv E:\aaa.hprof E:\output.hprof
    转换之后 用MemoryAnalyzer.exe 打开这个output.hprof文件

    由于我们内存泄漏一般发生在Activity中,因此只需要查找Activity即可。
    Step2:点击QQL图标 输入 select * from instanceof android.app.Activity ,点击红色感叹号执行

    step3、邮件点击需要的右击一个XXXActivity
    Path to GC Roots-->with all Reference 查看引用情况,Activity或View大于1个对象, 都有可能发生内存泄露.

    PS:看到 this0引用了这个Activity而this0是表示 内部类的意思,也就是一个内部类引用了Activity 而 this$0又被 target引用 target是一个线程,原因找到了,内存泄漏的原因 就是 Activity被 内部类引用 而内部类又被线程使用 因此无法释放,

    step4、点击三个竖条按钮,显示Histogram(直方图),可以查看activity的引用情况

    heap viewer使用:
    可以用来检测是否有内存泄漏,对于内存抖动,我们也可以用该工具检测,因为内存抖动的时候,会频繁发生GC,这个时候我们只需要开启Heap Viewer,观察数据的变化,如果发生内存抖动,会观察到数据在段时间内频繁更新。

    如果发现内存在每次GC后,都在增长,不管是慢增长还是快速增长,都说明有内存泄漏的可能性
    

    tool-->Android-->Android Devide Monitor-->heap
    选中程序,开始记录:
    先选中你要检测的应用的包名,然后点击(绿色小电池土标),会在程序包名后标记这个图标

    step3:开始跑程序

    step4:GC,查看内存增长情况

    Allocation Tracker使用:

    在monitor界面,点击Memory的紫色图标右边有个圆的图标
    运行一段时间后
    继续点击这个图标来暂停

    之后通过包名字来分析

    相关文章

      网友评论

          本文标题:Android内存工具使用简介

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