JEP 410:移除实验性的 AOT 和 JIT 编译器
总结
移除实验性的基于 Java 的提前编译(AOT)和即时编译(JIT)编译器。自该编译器推出以来,使用率一直很低,而维护它所需的工作量却很大。保留实验性的 Java 级别 JVM 编译器接口(JVMCI),以便开发者能够继续使用外部构建的编译器版本进行 JIT 编译。
动机
预先编译(jaotc
工具)作为一项实验性功能通过 JEP 295 被纳入到 JDK 9 中。jaotc
工具使用了本身用 Java 编写的 Graal 编译器来进行 AOT 编译。
Graal 编译器通过 JEP 317 作为实验性的 JIT 编译器在 JDK 10 中可用。
自从这些实验性功能推出以来,我们很少看到它们被使用,而且维护和增强它们所需的工作量是巨大的。这些功能未被包含在甲骨文发布的 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。
风险与假设
我们假设积极使用这些功能的开发者已经得到了关于此次移除的充分通知。