Android内存分析工具集【4】Android Studio Profiler Memory
Memory Profiler是Android Profiler的一个组件, 用于帮助分析内存泄露和内存抖动的问题。
Memory Profiler的功能包括:
展示应用内存使用情况的实时图像、抓取内存的dump信息、强制垃圾回收及追踪内存分配。
2.1 开启步骤
打开Memory Profiler的步骤为:
依次点击Android Studio的View → Tool Windows → Android Profiler,
或直接点击工具栏Android Profiler对应的图标
2、 PC连接Android终端后,在Android Profiler对应的区域选择接的设备和需要监控的进程:
3、 点击Android Profiler界面中MEMORY区域的任意位置,即可开启Memory Profiler,如下图所示:
界面介绍
打开Memory Profiler后,主界面如下所示(为了方便,这里直接盗取Android技术文档中的图):
其中:
标注1对应的按键用于强制内存回收。
标注2对应的按键用于抓取进程内存的dump信息。
标注3对应的按键用于记录内存的分配信息(连接Android 7.1及以下才会有此按键)。
初次点击时,对应统计的开始时间点;再次点击时,对应统计的结束时间点。
进程在两个时间点之间的内存分配信息,将被Memory Profiler记录和分析。
标注4对应的区域用于缩放时间轴。
标注5对应的按键用于显示实时的内存数据。
标注6对应的区域用于记录事件发生的时间点及大致持续的时间(例如activity状态改变、用户操作界面等事件)。
标注7对应的区域用于显示内存使用情况对应的时间轴(与标注6结合,就可以看出各事件带来的内存变化情况)。
需要说明的是,标注7对应区域显示的内容包括:
不同类型内存占用情况对应的图像;
分配对象数量对应的短画线;
内存回收事件发生的时机。
2.3 统计的数据类型及含义
Memory Profiler主要根据Android系统提供的信息,
统计app独自占用内存,即不统计app与系统或其它app共有的内存。
Memory Profiler统计内存的种类如下图所示:
如上图所示,其中:
Java表示Java代码或Kotlin代码分配的内存;
Native表示C或C++代码分配的内存(即使App没有native层,调用framework代码时,也有可能触发分配native内存);
Graphics表示图像相关缓存队列占用的内存;
Stack表示native和java占用的栈内存;
Code表示代码、资源文件、库文件等占用的内存;
Others表示无法明确分类的内存;
Allocated表示Java或Kotlin分配对象的数量(Android8.0以下时,仅统计Memory Profiler启动后,进程再分配的对象数量;
8.0以上时,由于系统内置了统计工具,Memory Profiler可以得到整个app启动后分配对象的数量)。