如果您正在编写原生代码并关注其内存使用情况,那么对应用的内存分配进行分析将有助于您发现潜在的优化空间。
为什么要分析应用内存
Android 提供了一个受管理的内存环境——当 Android 确定您的应用不再使用某些对象时,垃圾回收器会将未使用的内存释放回堆中。Android 查找未使用内存的方式在不断改进,但在所有 Android 版本上,系统在某个时刻都必须短暂地暂停您的代码。大多数情况下,这些暂停是无法察觉的。然而,如果您的应用分配内存的速度快于系统回收内存的速度,您的应用可能会在回收器释放足够的内存以满足分配需求时产生延迟。这种延迟可能会导致应用丢帧,并造成明显的卡顿。
有关可以减少应用内存使用的编程实践的信息,请阅读管理应用的内存。
原生内存分配概览
当您运行跟踪内存消耗(原生分配)任务时,Android Studio Profiler 会在您指定的时间段内跟踪原生代码中对象的分配和释放情况,并提供以下信息:
- 分配 (Allocations):在选定时间段内使用
malloc()或new运算符分配的对象计数。 - 释放 (Deallocations):在选定时间段内使用
free()或delete运算符释放的对象计数。 - 分配大小 (Allocations Size):在选定时间段内所有分配的总字节数。
- 释放大小 (Deallocations Size):在选定时间段内所有已释放内存的总字节数。
- 总计数 (Total Count):“分配”列的值减去“释放”列的值。
- 剩余大小 (Remaining Size):“分配大小”列的值减去“释放大小”列的值。

可视化 (Visualization) 标签页显示了在选定时间范围内调用栈中所有与原生代码相关对象的汇总视图。它本质上展示了所示实例的调用栈占用的内存总量。第一行显示线程名称。默认情况下,对象根据分配大小从左到右堆叠;使用下拉菜单可以更改排序方式。

默认情况下,分析器使用的采样大小为 2048 字节:每分配 2048 字节的内存,就会拍摄一次内存快照。采样大小越小,快照频率越高,关于内存使用的数据也越准确。采样大小越大,数据准确性越低,但在记录时消耗的系统资源更少,性能也更好。要更改采样大小,请参阅编辑记录配置。