JEP 410: Remove the Experimental AOT and JIT Compiler | 移除实验性的 AOT 和 JIT 编译器
摘要
移除基于 Java 的实验性提前(AOT)和即时(JIT)编译器。自该编译器引入以来,其使用率一直很低,且维护成本高昂。保留实验性的 Java 级别 JVM 编译器接口(JVMCI),以便开发人员可以继续使用外部构建的编译器版本进行 JIT 编译。
动机
通过 JEP 295,提前编译(jaotc
工具)作为实验性功能被纳入 JDK 9。jaotc
工具使用 Graal 编译器进行 AOT 编译,而 Graal 编译器本身是用 Java 编写的。
通过 JEP 317,Graal 编译器在 JDK 10 中作为实验性 JIT 编译器提供。
自这些实验性功能引入以来,其使用率一直很低,且维护和增强的成本高昂。在 Oracle 发布的 JDK 16 构建版本中,这些功能 并未包含在内,且无人提出异议。
描述
移除三个 JDK 模块:
jdk.aot
—jaotc
工具jdk.internal.vm.compiler
— Graal 编译器jdk.internal.vm.compiler.management
— Graal 的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
保护的额外代码
最后,移除与 Graal 和 AOT 编译相关的测试以及 makefile 中的代码。
备选方案
希望使用 Graal 编译器进行 AOT 或 JIT 编译的开发人员可以使用 GraalVM。
风险与假设
我们假设积极使用这些功能的开发人员已经收到了关于此次移除的充分通知。