OpenJDK 新项目 Galahad 提案:GraalVM 社区版代码库部分合并计划
OpenJDK 项目提出了一个名为 Galahad 的新项目,旨在将 GraalVM 社区版 的部分代码库合并到 OpenJDK 中。这是长期以来为 Java 应用程序提供提前编译(AOT)能力的最新进展。
背景与动机
传统的 Java 开发模式是将代码编译为 JVM 字节码,依赖 JVM 动态运行时执行。JVM 提供了诸如类加载和反射等强大的动态技术,这是 Java 的核心优势之一。然而,业界一直存在将 Java 程序直接编译为机器代码的需求,主要原因包括:
- 减少 Java 应用程序达到峰值性能的预热时间。
- 降低 Java 应用程序的内存需求。
- 避免为应用程序不需要的运行时子系统消耗资源。
GraalVM 项目的重要角色
GraalVM 是近年来最成功的相关项目,由 Oracle Labs 的研究项目发展而来。其首个生产级版本 GraalVM 19.0 于 2019 年 5 月发布。GraalVM 的核心组件之一是 Graal 编译器,它能够将 Java 字节码编译为机器代码,并支持 JIT(即时编译) 和 AOT(提前编译) 两种模式。
Graal 与 OpenJDK 的历史关系
Graal 编译器通过以下两个 Java 增强提案(JEP) 被引入 OpenJDK:
- JEP 243:Java 级别的 JVM 编译器接口。
- JEP 295:提前编译。
Graal 在 Java 10 中作为实验性 JIT 编译器引入(JEP 317),但在 Java 17 中,AOT 和 JIT 编译器的实验性功能被移除,仅保留了 JVMCI,以便外部构建的 Graal 编译器仍可用于 JIT 编译。
Galahad 项目的目标与计划
Galahad 项目的核心目标是将 GraalVM 的最新 JIT 编译器引入 OpenJDK,作为 C2 编译器的替代方案。后续还将添加必要的 AOT 编译技术,以便 Graal JIT 编译器在 JVM 启动时即可使用。
由于 Graal 是用 Java 编写的,它可能面临启动缓慢的问题。解决这一问题的可能方案包括将 Graal 编译器预编译为原生代码,但目前尚不清楚是否会重启或重新启动相关工作。
项目组织与贡献者
Galahad 将作为 OpenJDK 的子项目运行,维护一个独立代码库,并定期与主线代码库同步。功能成熟后,将迁移到主线代码库。项目的初始基线是 JDK 20,但相关功能最早要到 JDK 21(预计 2023 年 9 月发布)才能正式发布。
Galahad 的贡献者包括来自 Oracle 的 OpenJDK 和 GraalVM 团队,以及来自 Red Hat 和 AWS 等社区的开发者。尽管 Galahad 与另一个 OpenJDK 项目 Leyden(专注于 AOT 编译及相关技术)的关系尚不明确,但两者有许多共同的贡献者。
未来展望
尽管 Galahad 项目仍处于早期阶段,但许多社区成员认为这是 Java 在云原生技术栈中保持领先地位的重要一步。通过整合 GraalVM 的核心 JIT 和 AOT 组件以及 Native Image 工具,OpenJDK 将进一步提升 Java 的性能和适应性。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。