针对 16 KB 页面大小进行优化

对于大多数编程任务,页面大小并不重要。但是,如果您要分配大量内存、处理高度优化的组件、直接与内核交互或执行大量文件操作,那么 Android 过渡到 16 KB 页面大小可能会为您的性能分析增加一些考虑因素。本文档重点介绍页面大小的变化如何改变性能动态。

检测内存问题

当您使用 mmap 分配内存时,请确保您始终传递一个页面大小的倍数的参数。如果您在具有 16 KB 页面大小的系统上请求 4096 字节,则内核会分配 16 KB,从而浪费 12 KB 的空间。查看 /proc/maps/proc/smaps(或使用 Android 工具 showmap,它可以很好地打印浪费的空间),或者检查您进程的 strace 可以帮助检测这些问题。

检测磁盘空间问题

在 Android 15 及更高版本上启动的设备默认具有 16 KB 对齐的 ELF,并且许多应用程序也是 16 KB 对齐的。无论系统如何,许多文件的填充都有所增加。要查看磁盘上的实际大小,您可以使用 du <my file> 来查看文件占用多少千字节。要查看文件的显示大小,您可以使用 du -b <my file>,它会显示文件大小(以字节为单位)。当显示大小大于实际大小时,这通常意味着文件被压缩或具有稀疏区域。当显示大小小于实际大小时,该文件可能具有额外的元数据,或者可能在磁盘上被拆分。使用这些检查,您可以分析磁盘上文件的实际大小。