网易首页 > 网易号 > 正文 申请入驻

Leyden 延迟了 OpenJDK AOT 编译器,转而优化 JIT 编译器

0
分享至

作者 | Karsten Silz

译者 | 张卫滨

策划 | 丁晓昀

Leyden 项目的目标是“解决 Java 启动时间慢、达到性能峰值慢和占用空间大等长期痛点问题”。它想通过在 OpenJDK 中“引入静态镜像的概念”来实现这一目标。静态镜像来自于对原生可执行文件的提前(Ahead-of-Time,AOT)编译。在两年没有公开的活动之后,Leyden 项目在 2022 年 5 月改变了方向,首先优化即时(Just-in-Time,JIT)编译。由此产生的优化几乎肯定要比最初计划的要弱,它最早会在 2025 年底交付给主流 Java 开发者。Oracle 的 Graal 项目已经实现了 Leyden 项目的目标,但其代价是该项目目前竭力想避免的。

Graal 项目起源于 Oracle Labs,并不是 OpenJDK 的一部分。它的 GraalVM Native Image 是一个 Java AOT 编译器,如今能够生成原生可执行文件。与 Java 的 JIT 编译器相比,它们有四个优势,即启动更快、内存和 CPU 占用更低、安全漏洞更少以及文件更小。

但是,这些成就是有代价的,那就是 GraalVM Native Image 对 Java 应用有一个所谓的封闭性假设(closed-world assumption)的要求,这对所有的 Java 的应用来说都是很难接受的。为什么呢?因为 Java 是一个动态语言,它在运行时赋予了应用很多的权力,比如反射、类加载,甚至构建类。有些特性在 GraalVM Native Image 的封闭世界里是无法正常运行的。这也就是 Leyden 项目现在想要“探索比封闭性假设更弱的约束,并发现它们能够实现哪些优化”的原因。尽管如此,Leyden 项目“依然有希望 [...] 生成完全静态的镜像”,只不过“这是长期来看”的目标了。

OpenJDK 以前曾经尝试过 AOT 编译

Leyden 项目是 OpenJDK 对 AOT 编译的第二次尝试。第一次尝试是 JEP 295 Ahead-of-Time Compilation 的 jaotc,并于 2017 年 9 月在 JDK 9 中交付。与 GraalVM Native Image 类似,它使用了 Graal 项目。但是,与 GraalVM Native Image 不同的是,它非常不受欢迎:当 Oracle 在 Java 16 构建版中移除 jaotc 时,“没有受到任何人的抱怨”。于是,Oracle 在 JDK 17 中,基于 JEP 410 Remove the Experimental AOT and JIT Compiler,干脆利落地移除了它。

对于 OpenJDK 项目来说,Leyden 有着不同寻常的历史。Java 语言的架构师 Mark Reinhold 在 2020 年 4 月提出了它,随后,OpenJDK 在 2020 年 6 月将其批准为一个项目。但是,从批准到 2022 年 5 月创建邮件列表的两年时间里,没有看到该项目任何明显的进展。这也就是该项目为何刚刚起步,现在主要关注的是“概念,而不是代码”的原因。Reinhold 指出,像“HotSpot JVM、C2 编译器、应用类数据共享(application class-data sharing,CDS)以及 jlink 链接工具”都是优化的目标。值得注意的是,列表里缺失的一个组件是 CRaC,它是一个 OpenJDK 项目,能够通过在磁盘中加载 Java 应用来减少启动时间。

通过反推可以得出可能的交付日期。现在,LTS 版本的重要性已经超出了预期。Ben Evans,之前就职于性能监控公司 New Relic,在 Devoxx UK 2022 上宣布“没有任何一个非 LTS 版本的市场份额超过了 1%”。这表明,主流的 Java 开发人员只会从一个 Java LTS 版本迁移至另一个 LTS 版本。

因为 Leyden 项目现在刚刚开始,估计很少有成果能够以生产可用的状态进入 2023 年 9 月份发布的 JDK 21(也就是下一个 LTS 版本)。所以,主流 Java 开发人员可能只有在 2025 年 9 月的 LTS 版本(JDK 25)中才能看到 Leyden 项目的第一批成果。基于这样的假设,Leyden 项目最早会在 2027 年 9 月通过 JDK 29 向原生可执行文件提供 AOT 编译功能。InfoQ 将继续关注 Leyden 项目的进展。

Spring Boot 对 Leyden 项目的反应

在 Leyden 考虑的特性中,至少有一些需要应用框架的支持才能发挥最佳效果,比如 jlink 或 CRaC。所以,InfoQ 联系了 Spring Boot、Quarkus 和 Micronaut 的开发者,了解他们对 Leyden 公告的初步反应。

Spring Framework 的项目负责人 Juergen Hoeller 对 Leyden 项目表示了认可:

Leyden 项目是一个很有前途的倡议,与我们在 Spring Framework 6 和 Spring Boot 3 的大方向上是一致的。

Hoeller 还欣然接受在 Spring 中支持 CRaC:

CRaC 堆快照可以作为改善 Spring 应用的启动时间的通用方案。在应用启动的最后阶段生成快照,此时几乎没有任何处于打开状态的文件或网络资源,这符合 CRaC 的预期。Spring 甚至已经在应用上下文刷新结束时重置了它的通用缓存,在用请求相关的元数据动态地重新填充缓存之前清除了启动相关的元数据。在 [......] 应用上下文对快照事件的具体反应,以及改进通用组件的“快照安全”方面,我们肯定会在技术上可行的情况下,在 Spring Framework 6.x 产品线中努力为早期采用者赋予更多的能力。

Hoeller 认为 Spring 将会很快支持 jlink 和 Java 平台模块系统(Java Platform Module System ,JPMS):

目前的 Spring Framework 6.0 的里程碑版本还不包括 module-info 描述符。但这在 9 月份 M6 里程碑版本的路线图上,在我们进入 6.0 的发布候选阶段时,会重新评估第三方生态系统的模块系统就绪情况。由于 Leyden 项目有可能将 jlink 变成一个更强大、更通用的工具,所以我们计划不仅为 jlink 目前的能力做好准备,也会考虑它进一步的演进。

Quarkus 对 Leyden 项目的反应

Quarkus 的联合创始人和共同负责人 Jason Greene 对 Leyden 项目发表了评论:

我们对 Leyden 项目修改 Java 语言规范以更好地支持静态镜像、原生编译和其他技术(如 JVM 检查点)的目标感到最为兴奋。此外,我们很高兴看到封闭性假设仍然可能是该项目的长期目标。

Greene 也欣然接受在 Quarkus 中支持 CRaC:

最近,对 CRaC 研究项目的初步支持已经由 CRaC 的负责人贡献给了 Quarkus 项目。不管运行时的目标类型是什么,Quarkus 都会进行构建时的优化,所以在 OpenJDK 上运行时,我们依然能够看到相当可观的成本节省,而不仅限于 GraalVM。在 OpenJDK 之上添加检查点的方式,比如 CRaC,能够进一步优化启动时间。它无法带来类似于原生镜像那样的成本节省,但是对倾向于或必须采用 JVM 执行的应用来讲,未来这都是一个很有意思的可选方案。

但是,Greene 对于在 Quarkus 中使用 jlink 和 JPMS 并没有表现出太高的热情:

截止到目前为止, jlink 只是为基于 JVM 的应用的存储开销带来了好处(不管有没有它,内存开销和启动时间基本上都是一样的)。但是,在容器和 Kubernetes 应用中,常见的实践是在标准 JVM 基础镜像上建立新的层,这已经比将所有的应用切换到 jlink 上带来了更多的成本节省(因为每个人都会打包自己裁剪过的 JVM)。在原生镜像的场景中,JVM 的细粒度元素编译到了镜像中,所以在这种情况下, jlink 也提供不了什么帮助。
同样,对于 JPMS,Quarkus 已经通过 Quarkus 扩展实现了自己的模块化理念,允许我们将依赖集修剪到只包含所需的内容。Quarkus 所采取的方式与简单扁平化 classpath 是兼容的,这也是大多数 Java 生态系统和构建工具如今所偏爱的方式。在成本方面,如果按照 jlink 的要求转向纯 JPMS 模块(没有自动模块),那么将意味着不仅对 Quarkus,还对 Quarkus 构建所需的大量的库都会产生破坏性的变更。在考虑进行转换之前,我们希望看到这些因素能够更好地平衡。

Micronaut 对 Leyden 项目的反应

Object Computing, Inc.(OCI)的首席软件工程师 Sergio del Amo Caballero 对 Leyden 项目没有发表 Micronaut 框架的官方声明。但他在最近一个关于在 Micronaut 上添加对 CRaC 支持的 GitHub issue 上对此进行了阐述。

Caballero 还分享了 2020 年 7 月的一段 YouTube 视频,视频中 Micronaut 的创始人 Graeme Rocher 对 JPMS 进行了评论:Micronaut 支持 JPMS 并发布了 module-info 文件,但必须要“在支持 Java 8 之间取得平衡”。JPMS 是在 Java 9 中加入的,但 Micronaut 3.5,即当前版本,仍然运行在 Java 8 上。

结 论

到目前为止,OpenJDK 还没有解决“Java 启动时间慢、达到性能峰值慢以及占用空间大的问题”。首先,它的 jaotc AOT 编译器并没有得到足够的动力,并且已经废弃了。随后,Leyden 项目开始对 Java 的原生编译进行标准化,但停滞了两年之久。

现在,Leyen 项目已经转向首先优化 JIT 编译,情况正在好转:Spring 和 Quarkus 都拥抱 CRaC 以减少启动时间。但是当涉及到实现较小的 Java 应用时,只有 Micronaut 坚持 Leyden 项目的建议,即使用 JPMS。Spring 计划在 2022 年底的 6.0 版本中支持 JPMS,不过 Spring 生态系统可能还不会这样做。而 Quarkus 目前没有计划加入 JPMS。

Leyden 项目的成果,最早可以在 2025 年底以 JEP 的形式到达主流 Java 开发者手中。因此,至少在那之前,将 GraalVM Native Image AOT 编译器与 Quarkus、Micronaut 或即将推出的 Spring Boot 3 等框架结合起来,仍然是避免“Java 启动时间慢、达到性能峰值慢以及占用空间大的问题”的最佳选择。

作者简介:

Karsten Silz 全栈 Java 开发人员,Karsten Silz 在欧洲和美国工作了 23 年。2004 年,他在美国合伙创立了一家提供软件产品的初创公司。Karsten 领导了 13 年的产品开发,并在公司成功出售后离开。自 2017 年以来,他一直在德国和英国做承包商(Spring Boot、Angular、Flutter)。2020 年,他作为 CTO 共同创立了 SaaS 初创公司“Your Home in Good Hands”。

https://www.infoq.com/news/2022/06/project-leyden-delays-aot/

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
上海大叔55岁未婚,住垃圾堆却要穿名牌,打开冰箱后才知啥叫生活

上海大叔55岁未婚,住垃圾堆却要穿名牌,打开冰箱后才知啥叫生活

寒士之言本尊
2025-09-08 23:20:45
主要仗10天就打完了,川普想让伊朗变成什么样?伊朗会成什么样?

主要仗10天就打完了,川普想让伊朗变成什么样?伊朗会成什么样?

邵旭峰域
2026-03-05 12:49:23
限制川普战争权力的尝试,为何以失败告终?

限制川普战争权力的尝试,为何以失败告终?

寰宇大观察
2026-03-05 16:36:40
人的基因有多强大?网友:今年剪了个短发,我爸一看就害怕!

人的基因有多强大?网友:今年剪了个短发,我爸一看就害怕!

另子维爱读史
2026-02-27 21:05:30
伊朗战事最新发展及后续发展预测

伊朗战事最新发展及后续发展预测

刘耘博士
2026-03-05 08:49:29
许家印出事前,潮汕大佬果断脱离恒大,如今只有他毫发无损!

许家印出事前,潮汕大佬果断脱离恒大,如今只有他毫发无损!

历史伟人录
2026-03-05 23:02:46
别乱进场!黄金藏着大风险

别乱进场!黄金藏着大风险

新浪财经
2026-03-05 20:18:41
乌克兰揭露:真正支持俄罗斯的竟是中国!一句“绝不军援”胜过十万吨武器

乌克兰揭露:真正支持俄罗斯的竟是中国!一句“绝不军援”胜过十万吨武器

健身狂人
2026-03-05 10:34:50
谴责侵略!流亡王储竟为美以张目

谴责侵略!流亡王储竟为美以张目

烽火瞭望者
2026-03-05 06:41:37
贵州44岁女子返岗途中突发心梗离世,老板派人千里吊唁,逝者丈夫:想当面向老板表示感谢,对方说都是兄弟姐妹不用太声张

贵州44岁女子返岗途中突发心梗离世,老板派人千里吊唁,逝者丈夫:想当面向老板表示感谢,对方说都是兄弟姐妹不用太声张

极目新闻
2026-03-05 16:19:29
洪熙官真实存在,武艺高强活了93岁开创洪拳,晚年命丧少女之手

洪熙官真实存在,武艺高强活了93岁开创洪拳,晚年命丧少女之手

铭记历史呀
2026-03-04 01:13:40
熬出头!腿筋伤痊愈,50分先生回归,约老师终于不用孤军奋战了

熬出头!腿筋伤痊愈,50分先生回归,约老师终于不用孤军奋战了

球童无忌
2026-03-05 21:17:28
5-6!1-2!疯狂一夜,马赛爆冷出局,曼联被绝杀,皇家社会进决赛

5-6!1-2!疯狂一夜,马赛爆冷出局,曼联被绝杀,皇家社会进决赛

足球狗说
2026-03-05 06:53:43
两个小药丸儿,一个助硬,一个延时长,在家门口的药店就能买到

两个小药丸儿,一个助硬,一个延时长,在家门口的药店就能买到

中医陈旺医生
2025-11-14 10:43:05
央视主持沙桐:离婚后妻子嘲讽二人多年没性生活,前妻直言别扯淡

央视主持沙桐:离婚后妻子嘲讽二人多年没性生活,前妻直言别扯淡

冷紫葉
2026-02-25 15:28:41
比亚迪王炸技术曝光:150度电、1300匹马力、1000公里续航!

比亚迪王炸技术曝光:150度电、1300匹马力、1000公里续航!

新浪财经
2026-03-04 18:48:54
父亲给两个儿子取了同一个名字:博古之子秦刚传奇人生与时代印记

父亲给两个儿子取了同一个名字:博古之子秦刚传奇人生与时代印记

老籣说体育
2026-02-07 11:23:49
近万吨新疆三文鱼,都去哪了?

近万吨新疆三文鱼,都去哪了?

钛媒体APP
2026-03-03 09:54:23
伊朗一世界遗产戈勒斯坦宫被炸损毁,一片狼藉,前后对比视频曝光

伊朗一世界遗产戈勒斯坦宫被炸损毁,一片狼藉,前后对比视频曝光

潇湘晨报
2026-03-03 16:11:20
外媒分享特斯拉FSD v14.2.2.5实测报告:极端化表现引发用户困惑

外媒分享特斯拉FSD v14.2.2.5实测报告:极端化表现引发用户困惑

环球网资讯
2026-03-05 16:51:01
2026-03-06 00:39:00
InfoQ incentive-icons
InfoQ
有内容的技术社区媒体
12110文章数 51786关注度
往期回顾 全部

科技要闻

独家|林俊旸辞职 我们和认识他的人聊了聊

头条要闻

伊朗军舰从印度返航遭美军鱼雷击沉 印度否认美方说法

头条要闻

伊朗军舰从印度返航遭美军鱼雷击沉 印度否认美方说法

体育要闻

不开玩笑,没人想在季后赛碰上黄蜂

娱乐要闻

谢娜下场撕薛之谦,张杰前女友爆猛料

财经要闻

“十五五”开局之年,这么干!

汽车要闻

15.98万元起 第三代领克03大尾翼版上市

态度原创

时尚
教育
本地
家居
军事航空

显白的奶茶色,穿出春日味道

教育要闻

只有成为了爱本身,才能真正理解无条件的爱!

本地新闻

食味印象|一口入魂!康乐烤肉串起千年丝路香

家居要闻

奶白柔境 闲卧享时光

军事要闻

2026年中国国防预算增长7%

无障碍浏览 进入关怀版