如果您正在编写原生代码并担心其内存使用情况,则对应用的原生内存分配进行分析非常有帮助,以便发现是否有优化机会。
为什么要分析应用内存
Android 提供了一个托管内存环境——当 Android 确定您的应用不再使用某些对象时,垃圾回收器会将未使用的内存释放回堆。Android 如何查找未使用的内存一直在不断改进,但在所有 Android 版本中,系统都必须在某个时间点短暂暂停您的代码。大多数情况下,暂停是无法察觉的。但是,如果您的应用分配内存的速度快于系统收集内存的速度,则在垃圾回收器释放足够的内存以满足您的分配需求时,您的应用可能会延迟。延迟可能会导致应用跳过帧并导致明显的缓慢。
有关可减少应用内存使用的编程实践的信息,请阅读管理应用的内存。
原生内存分配概述
当您运行**跟踪内存消耗(原生内存分配)**任务时,Android Studio Profiler 会在您指定的时间段内跟踪原生代码中对象的分配和释放,并提供以下信息
- 分配:在选定时间段内使用
malloc()
或new
运算符分配的对象数量。 - 内存释放:在选定时间段内,使用
free()
或delete
运算符释放的对象数量。 - 内存分配大小:在选定时间段内所有内存分配的总大小(以字节为单位)。
- 内存释放大小:在选定时间段内所有已释放内存的总大小(以字节为单位)。
- 总数:分配列中的值减去释放列中的值。
- 剩余大小:分配大小列中的值减去释放大小列中的值。
可视化选项卡显示了在选定时间范围内与调用栈中本地代码相关的所有对象的聚合视图。它基本上显示了显示的实例所在的调用栈占用了多少总内存。第一行显示线程名称。默认情况下,对象会根据分配大小从左到右堆叠;使用下拉菜单更改排序。
默认情况下,分析器使用 2048 字节的样本大小:每次分配 2048 字节内存时,都会拍摄内存快照。较小的样本大小会导致更频繁的快照,从而产生更准确的内存使用情况数据。较大的样本大小产生的数据准确性较低,但它消耗的系统资源更少,并在录制时提高性能。要更改样本大小,请参阅编辑录制配置。