谷歌在不影响代码质量的情况下将ART编译时间提升了18%

2025年12月31日 由 佚名 发表 19 0
谷歌的Android运行时(ART)团队取得了显著进展。编译时间减少了18%。在不影响代码质量或增加峰值内存使用的情况下,为Android代码提供了显著的性能提升,适用于即时编译(JIT)和预编译(AOT)。

正如谷歌软件工程师Santiago Aboy Solanes和Vladimír Marko所解释的,减少JIT编译代码的编译时间可以让优化在运行时更快生效,直接提升设备的整体性能。对于JIT和AOT编译的代码,较快的构建速度减少了设备的工作负载,并改善了电池寿命和热性能,尤其是在低端硬件上。


Aboy和Marko强调在不牺牲生成代码性能或增加其内存需求的情况下减少编译时间的重要性。通常,他们指出,使编译器更快意味着要放弃其他东西。然而,在这种情况下:


我们愿意投入的唯一资源是我们自己的开发时间,以深入研究、调查并找到满足这些严格标准的巧妙解决方案。让我们更仔细地看看我们如何努力寻找改进的领域,以及找到各种问题的正确解决方案。


他们专注于三个关键工作,首先是使用工具如pprof仔细测量编译时间,以建立变更前后的性能比较基线。然后,他们选择了一组具有代表性的第一方和第三方应用程序,以及Android操作系统本身,以分析典型的工作负载并原型化潜在的解决方案。


通过这组精心挑选的apk,我们会在本地触发手动编译,获取编译的分析,并使用pprof来可视化我们花费时间的地方。[...] 这个pprof工具非常强大,允许我们切片、过滤和排序数据,以查看例如哪些编译器阶段或方法花费了最多时间。


在此基础上,ART工程师通过跳过无效的迭代、使用启发式和额外的缓存来避免昂贵的计算、懒惰地计算结果以消除冗余循环、清理抽象等方式减少了内部编译器阶段的不必要工作。


提前识别哪些优化值得追求需要特别小心,以尽量减少无效的努力。


在检测到某个区域消耗了大量编译时间并投入开发时间尝试改进后,有时你可能找不到解决方案。也许没有什么可做的,实施需要太长时间,会显著回退其他指标,增加代码库的复杂性等。


为此,ART团队旨在估计每个指标可以通过最小努力改进多少。这涉及使用先前收集的指标或有时仅凭直觉,构建一个快速而粗糙的原型,最后实施一个合适的解决方案。


Aboy和Marko还提供了一些已实施优化的列表,包括将FindReferenceInfoOf的查找复杂度从O(n)降低到O(1),通过引用传递数据结构以避免不必要的数据创建和销毁,缓存计算值,以及许多其他无法在此全部涵盖的优化。


其中一些速度提升在2025年6月的Android版本中引入,而其余优化则包含在年底的版本中。此外,Android 12及以上版本可以通过主线更新接收这些改进。


文章来源:https://www.infoq.com/news/2025/12/android-art-jit-aot-improvement/
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
热门职位
Maluuba
20000~40000/月
Cisco
25000~30000/月 深圳市
PilotAILabs
30000~60000/年 深圳市
写评论取消
回复取消