提前准备:手机上安装debug包,并打开app运行
1、生成堆快照
(1)打开Android Studio
(2)android monitor视图中,选择monitors
(3)进程选择:com.xxx.xx
(如出现android no debuggable application,AndroidStudio->Tools->Android->Enable ADB Integration active即可)
(4)操作时出现内存抖动/持续增加/卡顿,点击按钮initiate GC(标识1),隔几秒点击按钮Dump Java Heap(标识2)
(5)过一会会生成堆快照文件(时长不确定,1-2min左右),堆快照命名规则:包名_日期.hprof
2、查看堆快照
(1)点击左侧capture按钮,出现Allocation Tracking和Heap Snapshop文件夹
(2)选择Heap Snapshop文件夹,最底部为最新生成的堆快照文件
(3)打开hprof文件,选择App heap(一般默认为该项)
(4)打开右侧Analyzer Tasks
3、对堆快照进行简单分析
(1)打开Analyzer Tasks
(2)勾选Detect Leaked Activities(因当前仅关注是否出现内存泄露)
(3)点击perform analysis按钮(绿色小三角)
(4)检测内存泄露结果:
如出现明显内存泄露,analysis results会将出现泄露的引用全部列出来(红色字符显示),直接右键jump to source(只能跳到类开头,不会到具体代码),检查原因;
如操作时发现内存增长未释放,但并未检测出来,还是有可能出现泄露,可使用MAT再做分析。
4、导出standard .hprof文件(Dalvik格式转换成J2SE HPROF格式)
(1)captures,选择待转换文件,右键export to standard .hprof
(2)android monitor生成的hprof文件,不是标准Java Heap,MAT无法识别,因此需要转换成标准Java Heap
5、其他点,通过logcat查看内存回收情况
有2种展示方式:Dalvik 和 ART
ART:
04-25 16:25:00.432 5213-5227/com.xxx.xxx I/art: Explicit concurrent mark sweep GC freed 15272(832KB) AllocSpace objects, 0(0B) LOS objects, 9% free, 144MB/160MB, paused 2.504ms total 102.860ms
Dalvik:
??????
网友评论