跳到主要内容

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.ciJEP 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

风险和假设

我们假设积极使用这些功能的开发人员已经充分注意到了这一删除。