当前位置: 首页 > 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.lryc.cn/news/626000.html

相关文章:

  • Go 进阶学习路线
  • 测试 Next.js 应用:工具与策略
  • 仲裁器设计(三)-- Weighted Round Robin 权重轮询调度
  • ASP4644稳压器的特性分析与系统测试方法研究
  • GPT-4.1旗舰模型:复杂任务的最佳选择及API集成实践
  • 【RustFS干货】RustFS的智能路由算法与其他分布式存储系统(如Ceph)的路由方案相比有哪些独特优势?
  • 2025杭电多校第九场 乘法逆元、阿斯蒂芬、计算几何 个人题解
  • 宿主获取插件View流程原理 - fetchViewByLayoutName
  • LWIP协议栈实现ARP协议
  • Python脚本每天爬取微博热搜-终版
  • Spring Cloud 微服务架构:Eureka 与 ZooKeeper 服务发现原理与实战指南 NO.1
  • Stream API-怎么理解流
  • Day13_【DataFrame数据组合merge连接】【案例】
  • Redis(11)如何通过命令行操作Redis?
  • 反向代理实现服务器联网
  • 人工神经网络MATLAB工具箱指南
  • Selenium自动化测试入门:cookie处理
  • electron进程间通信- 渲染进程与主进程双向通信
  • 如何用给各种IDE配置R语言环境
  • UGUI源码剖析(10):总结——基于源码分析的UGUI设计原则与性能优化策略
  • Ubuntu 和麒麟系统创建新用户 webapp、配置密码、赋予 sudo 权限并禁用 root 的 SSH 登录的详细
  • Python os 模块与路径操作:从基础到实战应用
  • 《AI 与人类创造力:是替代者还是 “超级协作者”?》​
  • 读《精益数据分析》:营收(Revenue)—— 设计可持续盈利模式
  • RabbitMQ:SpringAMQP 入门案例
  • Day22 顺序表与链表的实现及应用(含字典功能与操作对比)
  • 计算机大数据毕业设计推荐:基于Spark的气候疾病传播可视化分析系统【Hadoop、python、spark】
  • QT示例 基于Subdiv2D的Voronoi图实现鼠标点击屏幕碎裂掉落特效
  • jmetergrafanainfluxdb搭建压测监控平台
  • C# NX二次开发:操作按钮控件Button和标签控件Label详解