15来了 适配问题也就来了,之前讲过Android 15行为变更:所有应用_软件包停止状态变更-CSDN博客 里面有简单提到过16K内存适配,
本文就针对16KB页面设备适配详细介绍一下,
16KB页面(Page Size)带来的好处
配置为 16 KB 页面的设备平均使用的内存会略多,但系统和应用性能也会有所提升:
- 在系统面临内存压力时缩短应用启动时间:平均降低了 3.16%,对于我们测试过的一些应用而言,改进幅度更显著(提升幅度高达 30%)
- 降低应用启动时的功耗:平均降低 4.56%
- 相机启动速度更快:平均热启动速度加快 4.48%,冷启动速度平均加快 6.60%
- 缩短了系统启动时间:平均缩短了 1.5%(约 0.8 秒)
Page Size
页面(Page)指的就是 Linux 虚拟内存管理中使用的最小数据单位,页面大小(Page Size)就是虚拟地址空间中的页面大小, Linux 中进程的虚拟地址空间是由固定大小的页面组成。
对于虚拟内存, CPU 的内存管理单元(MMU)会将虚拟地址转换为物理地址,所以虚拟内存最终也会映射到物理内存页面。
而为了实现虚拟内存到物理的映射,两个地址空间都会被划分为多个固定页面,而虚拟空间和物理空间中的页面需要大小相同,通常长度为 4K,为了区分虚拟页面和物理页面,后者一般会被称为页框(page frames )。
因为 Android 用的是 Linux 内核,所以在内存逻辑一直以来都是遵循 Linux 的实现,只是 Android 由于“历史因素”限制,一直只支持 4 KB 内存页面大小,而现在为了优化系统内存性能,提高内存密集型工作负载的性能,Android 15 开始将采用 16KB 页面大小的要求。
异常日志:
当含有 “XXX.so” 的 android 项目,很可能需要重新编译带有全新的动态库(.so) 才能正常运行对应功能,不然大概率会 crash 。
Fatal signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0x7a58c6e5fcd0 in tid 25818 (e.myapplication), pid 25818 (e.myapplication)
2024-07-29 17:10:24.790 25877-25877 DEBUG pid-25877 A Cmdline: com.example.myapplication
2024-07-29 17:10:24.790 25877-25877 DEBUG pid-25877 A pid: 2581