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