JEP 410:删除实验性 AOT 和 JIT 编译器
概括
删除实验性的基于 Java 的提前 (AOT) 和即时 (JIT) 编译器。该编译器自推出以来几乎没有什么用处,并且维护它所需的工作量很大。保留实验性的Java级JVM编译器接口(JVMCI),以便开发人员可以继续使用外部构建的编译器版本进行JIT编译。
动机
提前编译(工具)通过JEP 295jaotc
作为实验性功能合并到 JDK 9 中。该工具使用 Graal 编译器(其本身是用 Java 编写的)进行 AOT 编译。jaotc
Graal 编译器通过JEP 317在 JDK 10 中作为实验性 JIT 编译器提供。
自引入这些实验性功能以来,我们很少看到它们的使用,并且维护和增强它们所需的工作量很大。这些功能并未包含在 Oracle 发布的 JDK 16 版本中,因此没有人抱怨。
描述
删除三个 JDK 模块:
jdk.aot
-jaotc
工具jdk.internal.vm.compiler
— Graal 编译器jdk.internal.vm.compiler.management
— 格拉尔的MBean
保留这两个 Graal 相关的源文件,以便 JVMCI 模块(jdk.internal.vm.ci
JEP 243)继续构建:
src/jdk.internal.vm.compiler/share/classes/module-info.java
src/jdk.internal.vm.compiler.management/share/classes/module-info.java
删除与AOT编译相关的HotSpot代码:
src/hotspot/share/aot
— 转储并加载 AOT 代码- 附加代码由以下人员保护
#if INCLUDE_AOT
最后,删除测试以及 makefile 中与 Graal 和 AOT 编译相关的代码。
备择方案
希望使用 Graal 编译器进行 AOT 或 JIT 编译的开发人员可以使用GraalVM。
风险和假设
我们假设积极使用这些功能的开发人员已经充分注意到了这一删除。