@levinzhang
2023-01-08T10:53:05.000000Z
字数 2307
阅读 332
by
OpenJDK提出了一个新的项目,代号为Galahad,以便于将GraalVM原生编译中的一些功能合并到OpenJDK代码库中。
OpenJDK提出了一个新的项目 ,代号为Galahad,以便于将GraalVM社区版代码库中的一部分功能合并到OpenJDK中。
这是一项长期努力的最新进展,也就是在程序执行之前将Java应用编译为机器码的能力。乍看上去,这似乎有些奇怪,毕竟,一位新的Java开发人员最先了解到的一点就是“Java不会编译成机器码,而是编译成JVM字节码”。
这句简单的格言有着深远的影响,其中最基础的就是,Java平台依赖一个强大的运行时来执行,也就是JVM。这个运行时实现了动态运行技术,比如类加载和反射,这些技术在提前编译(ahead-of-time,AOT)语言中并没有真正类似的特性。实际上,这是Java强大功能的起点,也是Java能够在25年左右的时间内一直位于软件舞台中央的重要原因。
尽管如此,人们始终对Java程序直接编译为机器代码并在没有JVM情况下独立运行的可能性抱有强烈的兴趣。这种期望有多种原因,比如为了减少Java程序达到峰值性能的时间,减少Java应用的内存需求,甚至只是为了避免将资源用到应用本身并不需要的运行时子系统中。
迄今为止,已经有多个项目尝试实现这种可能性。最近的一个,也可以说是到目前为止最成功的一个,就是GraalVM项目。这个项目并不是来自OpenJDK,而是来源于Oracle Labs的一个研究性项目。它的第一个生产级别的版本GraalVM 19.0是在2019年5月份发布的。
从那时起,它一直作为一个独立项目来运作,具有与OpenJDK不同的发布周期,并且与OpenJDK的互动有限。在为数不多的Java增强提案(Java Enhancement Proposal,JEP)中,有两个是与GraalVM相关的:
这两个JEP都是在Java 9中出现的,它们一起将Graal编译器引入到了OpenJDK代码库中。
Graal编译器是GraalVM的主要组件之一,它是一个操作Java字节码并生成机器码的编译器,可以在JIT或AOT模式下运行。在JIT模式下,它可以用来代替C2(有时被称为“服务器编译器”)。值得注意的是,Graal本身是用Java编写的,不像其他用于JVM的JIT编译器都是用C++编写的。
在Java 10中,Graal凭借JEP 317作为实验性的、基于Java的JIT编译器添加了进来。但是,在Java 17(2021年9月发布)中,AOT和JIT编译器的实验性形式都被移除掉了。尽管如此,实验性的Java级JVM编译器接口(JVMCI)被保留了下来,因此,我们仍然可以使用外部构建的Graal编译器版本进行JIT编译。
如果最新的公告能够如期交付,将标志着Graal重新回到了OpenJDK代码库中。然而,更重要的也许是GraalVM流程和项目的变化。Galahad将作为OpenJDK的一个子项目来运作,并维护单独的仓库,定期与主线仓库进行rebase操作。当功能就绪时,它们将被迁移到主线仓库。这与长期运行的成功项目(如Loom和Lambda)所使用的模式是相同的。
Galahad将JDK 20作为初始基线。这基本上就是代码和技术的起点而已,因为JDK 20已经进入了Rampdown阶段,所以至少在JDK 21(预计2023年9月)之前,不可能有任何重新引入的Graal代码作为Java的一部分交付。目前,Galahad将专注于贡献最新版本的GraalVM JIT编译器,并将其作为C2的替代方案进行集成。稍后,一些必要的AOT编译技术将被加入进来,以便于Graal JIT编译器在JVM启动时立即可用。
这是必要的,因为Graal本身就是用Java编写的,它可能会遭受我们广泛面临的启动缓慢问题:
将Graal编译器预编译为原生代码有可能会解决这个问题,有一个旧的JEP草案提出了这种方式,但是目前还不知道它是否会被恢复或重新开始寻找新的方案。
需要注意的是,并不是所有的GraalVM代码库都会被提交至OpenJDK,它只包含核心的JIT和AOT组件,以及原生镜像工具。甲骨文公司在GralVM企业版中的专有特性预计不会捐献给该项目。
Galahad在项目之初就有一个值得关注的提交者名单,他们不仅来自甲骨文的OpenJDK和GraalVM团队,还有来自更广泛的OpenJDK社区的许多贡献者,包括来自Red Hat的Andrew Dinn和Dan Heidinga以及来自AWS的Roman Kennke。Galahad和Leyden项目(另一个研究AOT编译和相关技术的OpenJDK项目)之间的确切关系尚不清楚,但Galahad的一些贡献者也一直活跃在Leyden中。
尽管该项目仍处于早期阶段,但许多有影响力的社区成员对Galahad表示欢迎,认为它代表了在保持Java处于云原生技术栈的领先地位方面,这是一项重要的进展。
查看英文原文:OpenJDK Proposes Project Galahad to Merge GraalVM Native Compilation