当前位置: 首页 > news >正文

谷歌为什么要将Android的页面大小(Page Size)从传统的4KB升级至16KB

文章目录

  • 一、硬件演进与内存管理瓶颈
  • 二、性能优化收益(核心优势)
  • 三、挑战
  • 四、总结

谷歌将Android的页面大小(Page Size)从传统的4KB升级至16KB,有啥收益?最核心的肯定是机器运行性能得到优化!

Google Play要求2025年11月1日起,面向Android 15+设备的应用必须支持16KB页,否则无法上架。https://developer.android.com/guide/practices/page-sizes?hl=zh-cn#groovy

那为什么是在今年开始要求上架的APP要适配这个要求了呢?主要是现代硬件演进已经满足需求了,不用再等了。

下面会具体讲一下,从硬件发展、性能收益、带来的挑战三个维度进行分析。

一、硬件演进与内存管理瓶颈

  1. 硬件内存容量激增
    • 现代设备RAM已普及8GB~24GB(如旗舰机型),ARM64架构成为主流。

    • 问题:4KB页面导致页表项(Page Table Entry)数量爆炸式增长。例如管理12GB内存需314万条页表项(4KB页),而16KB页仅需78.5万条,减少75%。

    • 影响:CPU的内存管理单元(MMU)负载过重,频繁查询页表拖慢地址转换效率。

  2. 适配未来硬件架构
    • ARMv9架构原生支持16KB页,新芯片(如骁龙8 Gen4)优化大页内存访问延迟。

    • 苹果Silicon芯片(如A17 Pro)已采用16KB页,Android需对齐技术标准。

  3. TLB(地址转换缓存)瓶颈
    • TLB是缓存页表项的硬件组件,容量有限(通常L1 TLB仅64条)。

    • 16KB页优势:单条TLB条目覆盖内存范围扩大4倍。例如64条TLB在4KB页下仅覆盖256KB,而16KB页可覆盖1MB,显著提升TLB命中率(实测平均提升15%)。

二、性能优化收益(核心优势)

  1. 加速应用启动与响应
    • 页表项减少使内存映射效率提升,应用启动速度平均加快3.16%,部分应用(如游戏)提升高达30%。

    • 相机冷启动速度提升6.6%,热启动提升4.48%,满足快速抓拍需求。

  2. 降低内存管理开销
    • 系统内核(如kswapd内存回收线程)负载降低,减少CPU争抢:

    ◦ 页表遍历操作(Page Walking)频率下降,MMU功耗平均降低4.5%。

    ◦ OPPO实测显示:采用64KB动态大页(基于16KB架构)后,缺页异常(Page Fault)次数下降89%,指令执行数减少75.2%。

    这个再展开讲一下。当系统内存吃紧时,内核的kswapd线程需频繁扫描零散小页面回收内存。
    在4KB页面时:例如回收64MB内存时,需处理 16,384个 独立页面(64MB ÷ 4KB),每次回收触发CPU中断,线程切换频繁,kswapd占用CPU高达15% 。  
    在16KB页面时:同等内存回收量仅需处理 4,096个 页面(64MB ÷ 16KB),扫描次数减少75%。kswapd线程负载显著降低,实测CPU占用降至5%以下,释放的CPU资源可用于应用逻辑。 
    
  3. 减少内存碎片化
    • 16KB页分配更大连续块,降低外部碎片(External Fragmentation)概率。

    • 对比:4KB页频繁分配小内存易产生碎片,导致大块连续内存申请失败(需内存规整)。

    这个再展开讲一下.当应用申请64KB连续内存的场景下。
    在4KB页面时:系统需寻找16个连续空闲4KB页,若物理内存存在碎片(如下),分配可能失败。导致触发直接内存回收(Direct Reclaim),阻塞应用线程。  
    [已占4KB][空闲4KB][已占4KB][空闲4KB]... → 无连续64KB空间在16KB页面时: 同等64KB请求仅需4个连续16KB页,连续块更易找到。碎片率降低20%+,OOM(内存不足)概率显著下降。  
    
  4. 功耗敏感场景收益
    • MMU操作耗能与页表查询次数正相关。16KB页减少查询频率,延长移动设备续航:

    ◦ 应用启动功耗平均降低4.56%。

    ◦ 后台内存回收负载下降,缓解低电量时“杀后台”问题。

  5. 温控与流畅性平衡
    • 高负载场景(如游戏渲染)下,CPU因MMU负载减轻而降温,避免降频卡顿。

三、挑战

  1. 小内存分配可能浪费空间(如申请1KB内存时,16KB页会浪费15KB空间,而4KB页仅浪费3KB)。这个需要一些其他解决方案了,比如通过内存池技术优化,预分配大块内存,内部拆分为小对象复用。

  2. 要适配16KB页面大小,需重新编译原生库(.so文件),ELF对齐;另外硬编码4096的代码需修改,将其替换为动态获取页大小。这块也算是有一些工作量。

四、总结

谷歌推动16KB页的本质是平衡“内存管理粒度”与“硬件能力”:

  1. 性能优先:减少75%页表项、提升TLB命中率,释放CPU算力给应用逻辑;

  2. 能效优化:降低MMU功耗,延长移动设备续航;

  3. 生态强制:通过Play政策倒逼开发者适配,为未来硬件(如32GB RAM+3nm芯片)铺路。

http://www.dtcms.com/a/338720.html

相关文章:

  • 解决 UniApp 自定义弹框被图片或 Canvas 覆盖的 Bug
  • 云原生俱乐部-mysql知识点归纳(3)
  • 2 . 大纲
  • 常用植被物候提取方法 (TIMESATE/R语言/Python)-4.0
  • QChart智能坐标轴
  • 【3-3】流量控制与差错控制
  • Linux的ALSA音频框架学习笔记
  • 为单片机专门定制的Unicode字库和API接口
  • 18650锂电池自动化生产线:智能集成提升制造效能
  • Datawhale工作流自动化平台n8n入门教程(一):n8n简介与平台部署
  • 机器学习深度学习 所需数据的清洗实战案例 (结构清晰、万字解析、完整代码)包括机器学习方法预测缺失值的实践
  • 基于 PyTorch 模型训练优化、FastAPI 跨域配置与 Vue 响应式交互的手写数字识别
  • 【Qt】线程池与全局信号实现异步协作
  • 【qml-5】qml与c++交互(类型单例)
  • JVM垃圾收集器
  • Linux重置 root 密码:从原理到实操
  • 免费OCR工具支持哪些文档格式转换
  • 8.19打卡 DAY 46 通道注意力(SE注意力)
  • RPC高频问题与底层原理剖析
  • 在VSCode中进行Vue前端开发推荐的插件
  • 基于C语言基础对C++的进一步学习_知识补充、组合类、类中的静态成员与静态函数、类中的常对象和常成员函数、类中的this指针、类中的友元
  • Laya的适配模式选择
  • 使用 Ansys Discovery 探索外部空气动力学
  • 龙虎榜——20250819
  • python学习打卡day38
  • 上网行为管理-内容审计
  • 初识CNN05——经典网络认识2
  • GPT-5 上线风波深度复盘:从口碑两极到策略调整,OpenAI 的变与不变
  • 006.Redis 哨兵(Sentinel)架构实战
  • 多序列时间序列预测案例:scalecast库的使用