记录原生内存分配

如果您正在编写原生代码并关注其内存使用情况,分析应用的原生内存分配将有助于发现优化机会。

为什么要分析应用内存

Android 提供受管理内存环境 — 当 Android 确定您的应用不再使用某些对象时,垃圾回收器会将未使用的内存释放回堆中。Android 查找未使用的内存的方式正在不断改进,但在所有 Android 版本上,系统都必须在某个时刻短暂暂停您的代码。大多数情况下,暂停是察觉不到的。但是,如果您的应用分配内存的速度快于系统回收的速度,那么您的应用可能会在回收器释放足够的内存以满足您的分配时出现延迟。这种延迟可能会导致您的应用跳帧并导致明显的卡顿。

如需了解可以减少应用内存使用的编程实践,请阅读管理应用内存

原生内存分配概览

当您运行 跟踪内存消耗(原生内存分配) 任务时,Android Studio 分析器会在您指定的时间段内跟踪原生代码中对象的分配和解除分配,并提供以下信息:

  • 分配数:在选定时间段内使用 malloc()new 运算符分配的对象数量。
  • 解除分配数:在选定时间段内使用 free()delete 运算符解除分配的对象数量。
  • 分配大小:在选定时间段内所有分配的总字节大小。
  • 解除分配大小:在选定时间段内所有已释放内存的总字节大小。
  • 总计数分配数列中的值减去解除分配数列中的值。
  • 剩余大小分配大小列中的值减去解除分配大小列中的值。

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

默认情况下,分析器使用 2048 字节的采样大小:每次分配 2048 字节的内存时,都会拍摄内存快照。较小的采样大小会导致更频繁的快照,从而提供更准确的内存使用数据。较大的采样大小会提供不那么准确的数据,但会消耗更少的系统资源并提高录制时的性能。要更改采样大小,请参阅修改录制配置