JEP 317:基于 Java 的实验性 JIT 编译器
概述
启用基于 Java 的即时编译器 Graal,作为 Linux/x64 平台上实验性的即时编译器使用。
非目标
目标并不是要达到或超越现有 JIT 编译器的性能。
动机
Graal 是一个基于 Java 的 JIT 编译器,是 JDK 9 中引入的实验性的提前编译(AOT)编译器的基础。启用它作为实验性 JIT 编译器是 Project Metropolis 的举措之一,也是进一步研究基于 Java 的 JIT 在 JDK 中的可行性的下一步。
描述
启用 Graal 作为实验性的即时(JIT)编译器,首先从 Linux/x64 平台开始。Graal 将使用在 JDK 9 中引入的 JVM 编译器接口(JVMCI)。Graal 已经包含在 JDK 中,因此将其作为实验性 JIT 启用主要将是一个测试与调试的工作。
要将 Graal 作为 JIT 编译器启用,请在 java
命令行中使用以下选项:
-XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler
测试
此项工作计划进行编译器的标准测试。这包括在 Linux/x64 上使用各种标志选项运行所有的 HotSpot 和 JDK 测试。除了这些标准测试之外,还将运行专门为 Graal 开发的单元测试。将在 jtreg
框架中实现运行这些单元测试的支持。作为这项工作的一部分,将进行初步的性能测试和基准测试。
风险与假设
此实验性产品存在启动性能较慢和 Java 堆使用量增加的问题,可能会影响和/或限制最初的开发者评估。与现有的 HotSpot JIT 编译器相比,某些应用程序和基准测试在 Graal 上会出现性能差距。