Android内存工具使用简介
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的紫色图标右边有个圆的图标
运行一段时间后
继续点击这个图标来暂停
之后通过包名字来分析