完整教程:Android 宣布 Runtime 编译速度史诗级提升:在编译时间上优化了 18%

news/2026/1/26 19:57:50/文章来源:https://www.cnblogs.com/ljbguanli/p/19535396

完整教程:Android 宣布 Runtime 编译速度史诗级提升:在编译时间上优化了 18%

近期,Android 官方宣布了 Android Runtime 在编译时间上完成了 18% 的显著优化,同时不牺牲编译代码的质量,也没有增加峰值内存使用,换句话说,这属于是一个“速度提升 + 零损失”的优化成果。

实际上该调整作为 2025 年的关键 KPI ,目前已经建立了分阶段 rollout:部分优化已经在 2025 年 6 月的 Android 发布中上线,其余会在年底发布中完成,所有运行 Android 12 及以上版本的用户都可以借助 mainline 更新得到这些改进。

“mainline 更新”( Project Mainline / Google Play System Updates) 是一种模块化更新机制,它支持 Google 通过 Google Play 直接更新 Android 系统的核心组件(如Android Runtime、媒体框架、安全模块等),这个更新不需要用户等待 OTA 。

而这次优化更加具体的说就是:

  • 编译时间减少了 18%

  • 对编译器最终输出质量没有负面影响

  • 没有出现内存回归(就是提升过程中不增加内存占用峰值)

并且,这些改进对于 JIT 和 AOT(预先编译) 都有用,当然这里提到的 Android Runtime(ART)“编译速度”不是你在本地用 Gradle 构建 APK 的速度,而是「设备端 ART 对 app 字节码进行 AOT / JIT 编译的速度」,一般而言针对ART 内部的“编译器执行速度”会有:

  • JIT 编译速度
  • AOT / dex2oat 编译速度
  • 编译器各个 IR / 优化 pass 的执行时间

例如在 ART 里有很多 pass(比如 GVN、某些数据流分析),每次都会遍历 IR,即使当前方法根本不满足优化条件也会完整跑一遍逻辑,这种行为带来的开销并没有产生收益:

官方提到,在之前有一个名为全局值编号 (GVN) 的阶段,这个过程里它有一个名为 Kill 的方法,这个方法会根据过滤器删除一些节点,由于它需要遍历所有节点并逐个检查,因此非常耗时,而事实上无论当时有多少节点存活,其实都能预先知道检查结果为 false ,那么在这种情况下完全可以跳过遍历,从而将性能消耗从 1.023% 降低到约 0.3%,并将 GVN 的运行时间缩短约 15%。

其他的一些案例,包括有:

FindReferenceInfoOf 的查找优化

LoadStoreAnalysis 阶段的方法 FindReferenceInfoOf 原本使用线性搜索 O(n) 在向量中查找,而现在将数据结构改为以指令 ID 为索引,实现 O(1) 查找,并预分配向量以避免 resize , 从而在该阶段加速 34 - 66%,总编译时间提升 0.5-1.8%,虽然增加了一个计数字段,但峰值内存没有增加

结构调整

代码库中使用了一个自定义的 HashSet,多年前是为了处理极少数的大型集合而优化的,但现在的用法变成了创建大量小型的、短生命周期的集合,所以本地调整实现以适应“小而短”的用法,减少创建和销毁开销,从而让编译时间提升 1.3-2%,且内存使用量反而下降了 0.5-1%

还有通过将数据结构以引用方式传递给 lambda 表达式,避免了数据结构的复制,从而将编译时间缩短了约 0.5% 到 1% ,这一点在最初的代码审查中被忽略了,并在代码库中保留了多年:

内联 (Inlining) 检查

编译器为了性能会内联函数,原本的流程是先计算大量数据,最后再做“最终检查”(如指令数、寄存器需求)决定是否内联,而现在将这些检查从“计算后”移到了“计算前”作为启发式规则(Heuristics),避免了大量无效计算,仅指令数检查一项的移动就带来了约 2% 的提升

事实上官方在进行这些调整时也遇到了不少问题,基于即使你发现某个区域占用了大量编译时间,并且投入了创建时间尝试改进,有时也找不到解决方案,当你修改了 A 问题后,自然而然就带了 B 问题,比如:

  • 内存回归:在优化“输出写入”阶段时,团队通过缓存计算值来加速(原本预计提升 1.3-2.8%),但自动化测试时发现,额外的缓存数据结构导致了内存使用量的显著增加
  • 历史遗留负担 :许多低效代码是因为历史原因遗留下来的(比如上述的 HashSet),或者是因为代码审查疏忽(将对象按值传递而不是按引用传递)
  • 复杂度的权衡:某些优化方案可能过于复杂,或者会增加代码维护难度

针对这些问题,官方进行了一系列的调整尝试:

  • 重构解决内存回归:针对“输出写入”阶段的内存障碍,本次直接重构了该阶段的逻辑,这里设计了一种新方案,移除了两个冗余数据结构中的一个,这不仅应对了内存回退问题,还进一步提升了 0.5-1.8% 的速度
  • 使用 pprof 进行深度分析 :利用 pprof 工具生成 Flame Graph和 Bottom-up 视图,精准定位那些“隐形”的开销(如频繁的 Kill 方法或意外的对象拷贝)
  • “快速迭代”策略:为了节省编写时间,先用原型(Prototype)在典型应用(First-party apps, Android OS)上快速验证想法,确认收益后再进行完整的工程搭建和测试
  • 利用全新 C++ 特性 :比如使用 BitVectorView 替代可变长的 BitVector,并利用模板化实现让 Union() 操作在 64 位平台上一次处理两倍的位数

除此之外还有:

最后

最后,看不懂不要紧,只需要知道它很牛逼,并且还能让 Android 12 以后的机器变得更快,在用户端体现出来就是:

  • app 启动更快
  • 冷启动更少卡顿
  • 低端机更友好
  • 安装 / 更新变快

一份优秀的编译器工程的案例研究。就是同时也展示了教科书级别的优化策略,不仅要看速度,更要看内存、稳定性、可维护性等综合指标,所以官方这份报告不仅仅是手艺公告,更

参考链接

https://android-developers.googleblog.com/2025/12/18-faster-compiles-0-compromises.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1220581.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2026制动改装品牌榜 CMYCH卡钳性能对比

2026制动改装品牌榜 CMYCH卡钳性能对比2026制动改装品牌榜 CMYCH卡钳性能对比 一、行业背景与筛选维度 根据《中国汽车改装技术标准与服务白皮书》2025版数据,国内汽车制动改装市场规模突破320亿元,年复合增长率达18…

Amphenol CS(High Speed IO)PCIe 与 QSFP 高速 IO 线缆设计与选型实践

在现代高性能计算、数据中心互联和通信系统中,高速 IO 线缆是实现可靠数据传输的关键基础构件。随着 PCIe 及 QSFP 等高速协议的广泛应用,对线缆的信号完整性、阻抗匹配、串扰抑制以及环境适应性提出了更高要求。 Amphenol CS(High Speed IO&…

服务器互联中的 Amphenol ICC(FCI)电缆组件选型逻辑

在服务器互联、存储设备和数据通信架构中,连接器与电缆组件构成了设备之间传输链路的关键一环。Amphenol ICC(原 FCI) 是全球互连系统解决方案的知名供应者,其推出的电缆组件与连接器体系因卓越的可靠性和工程适配性,在…

ATGBICS 光模块兼容光缆选型与互连兼容性测试指南

在现代数据通信和网络架构中,光模块及其互连光缆是高带宽链路不可或缺的组成部分。随着行业标准(如 SFP、QSFP、OSFP 等 MSA 规范)的成熟,基于光纤的高速互连技术在数据中心、企业网络、服务器通信等场景中得到广泛应用。光缆组件…

Maxwell或者motorcad建模仿真 1、电机电磁设计仿真; 2、可提供设计报告或ans...

Maxwell或者motorcad建模仿真 1、电机电磁设计仿真; 2、可提供设计报告或ansysEM源文件等;报告包含反电势,LDLQ,齿槽转矩,效率map等客户需要的参数,以及退磁仿真等等; 3、可提供3D和2D图纸结构设…

基于SpringBoot的企业级进销存ERP系统Java源码

基于springBoot企业级进销存ERP系统源码 java源码 Spring Boot的企业级进销存系统开发中,最让人头疼的不是功能实现,而是如何在高并发场景下保证库存数据的准确性。去年我们团队重构老系统时,曾在促销活动中出现过库存超卖500件的重大事故—…

探秘综合能源系统:供需双响应与碳交易的完美邂逅

关键词:供需灵活双响应;可替代性负荷;阶梯式碳交易;综合能源系统;有机朗肯循环 主题:考虑阶梯式碳交易与供需灵活双响应的综合能源系统优化调度。 提出了供需灵活双响应机制,供应侧引入有机朗肯循环实现热电联产机组热电输出的灵活响应,需求侧在考虑电热…

玩转风光储并网系统建模

风光储并网系统 matlab/simulink风光储能并网交直流发电系统仿真模型,2018a版本,2021a版本 1)光伏和风电均采用扰动观察法最大功率跟踪 2)蓄电池为双向DC-DC变换器,采用电压环和电流环控制的双闭环控制,且电…

西门子plc巅峰应用,大型包膜机程序控制,常见的气缸,通讯,机械手,模拟量等,各种FB块,可用...

西门子plc巅峰应用,大型包膜机程序控制,常见的气缸,通讯,机械手,模拟量等,各种FB块,可用来参考和学习 软件博图,威纶通触摸屏,网络结构可参考图一,PTO控制20个轴&#xf…

基于hadoop的商城推荐系统 大数据个性化商城推荐 协同过滤推荐 推荐原理:每天定时更新数据集

基于hadoop的商城推荐系统 大数据个性化商城推荐 协同过滤推荐 推荐原理:每天定时更新数据集,数据集为当然商城中用户的订单信息,将数据集保存在hadoop的hdfs文件系统中,并触发计算,根据余弦相似度计算用户间的相似度&…

锂电池SOC估计基于二阶RC模型的扩展卡尔曼滤波估算SOC 验证工况:HPPC 和

锂电池SOC估计基于二阶RC模型的扩展卡尔曼滤波估算SOC 验证工况:HPPC 和 1C放电 锂电池SOC估计这玩意儿说难不难,但真要实操起来到处都是坑。今天咱们就拿二阶RC模型开刀,用扩展卡尔曼滤波(EKF)整点实在的。先甩个模型…

锂电池SOC估计模型SOC估算卡尔曼滤波估算SOC 各大交流论坛搜集的模型合集! 图中的12个...

锂电池SOC估计模型SOC估算卡尔曼滤波估算SOC 各大交流论坛搜集的模型合集! 图中的12个模型都有! 可以直接运行! 锂电池的续航焦虑就像夏天的蚊子一样挥之不去。玩过BMS开发的都知道,SOC估算简直就是玄学现场——你以为电压稳如老狗…

matlab代码:基于CNN和LSTM的个体用户负荷预测方法 摘要:在本文中,我们考虑的问题是...

matlab代码:基于CNN和LSTM的个体用户负荷预测方法 摘要:在本文中,我们考虑的问题是在需求响应机制下学习居民电力用户的消费模式。 提出了两种利用室外温度、电价和前期负荷预测小时负荷的新方法。 提出的模型分别基于CNN和长短期记忆网络。 …

基于S7-200 PLC与MCGS组态的隧道智能照明控制系统:梯形图程序、接线图与组态设计

基于S7-200 PLC与MCGS组态的隧道照明控制系统 带解释的梯形图程序,接线图原理图图纸,io分配,组态画面隧道照明系统是高速公路运维的老朋友了,凌晨三点突然接到值班电话说某个区段灯光异常,这种事儿我可经历过不少。今天…

org.flowable.common.engine.api.FlowableException: couldn‘t upgrade db schema: alter table ACT_RU_ENT

org.flowable.common.engine.api.FlowableException: couldnt upgrade db schema: alter table ACT_RU_ENTITYLINK add column HIERARCHY_TYPE_ varchar(255) -- -- 更新 Flowable 版本号脚本 -- 如果表已经创建,但 Flowable 启动时仍然尝试升级表结构,…

javascript:void怎么解决

1.首先打开IE浏览器,找到菜单栏工具。 2 工具菜单中单击Internet选项。 3 在常规选项卡中单击删除按钮,删除cookies和历史文件。 4 然后单击安全选项卡,选择默认级别。 5 切换到隐私选项卡单击高级按钮。 6 勾选覆盖cookie自动处理&…

北京丰台人和中医院王凤书教授,肝囊肿中医治疗成功案例!

在肝病诊疗领域,肝囊肿作为一种常见的肝脏良性病变,常常被患者忽视或过度焦虑。有人认为“良性囊肿无需治疗”,拖延之下任由小囊肿长成大病灶,加重肝脏负担;也有人得知患病后忧心忡忡,盲目寻求手术干预&…

基于VS Code的AI编辑器Debug ASP.NET Core 程序

问题https://github.com/dotnet/vscode-csharp/blob/main/docs/debugger/Microsoft-.NET-Core-Debugger-licensing-and-Microsoft-Visual-Studio-Code.md 下载netcoredbg地址:https://github.com/Samsung/netcoredbgt…

组态王轮胎裂解系统解析

基于组态王轮胎裂解系统 凌晨三点盯着监控屏幕,工业现场特有的蓝光在控制室里跳跃。四台裂解釜的实时数据像心电图般在组态王画面上抽搐,突然温度曲线来了个"深V"——这是我最熟悉的战场,基于组态王的轮胎裂解自动化系统。 这套系…

直流电机的仿真模型simulink 运行仿真前先运行DJCS1.m文件给模型赋值,利用转速电流...

直流电机的仿真模型simulink运行仿真前先运行DJCS1.m文件给模型赋值,利用转速电流双闭环结构,实现了电机电流快速跟随给定,电机最大转速在2700转左右,可以自己调节给定电压U*的值实现变速,通过改变电流的限幅电压值可以…