Java 10 解锁实验性 Graal JIT 编译器
JEP 317:实验性 Java 版 JIT 编译器
传统 JIT 编译器(C1/C2)由 C++ 实现。Java 10 引入 Graal——一个完全用 Java 编写的实验性 JIT 编译器,基于 Java 9 引入的 JVMCI (JVM Compiler Interface),可作为插件动态加载到 JVM。
启用方法
java -XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler YourApp
-XX:+UnlockExperimentalVMOptions:解锁实验性选项。-XX:+UseJVMCICompiler:启用基于 JVMCI 的编译器(即 Graal)。
Graal 核心特性
- Java 实现:编译器本身用 Java 编写,便于维护、扩展、调试。
- JVMCI 集成:通过标准化接口与 JVM 交互,可热插拔。
- 多语言支持:内置 Truffle 框架,支持 JavaScript、Python、Ruby、R、LLVM 等语言的高性能解释/编译(多语言互操作)。
- 目标平台:初期聚焦 Linux/x64,后续扩展更多架构。
风险与假设
- 实验性质:未经过生产级压力测试,可能存在稳定性问题。
- 性能基准:某些工作负载下可能不及成熟的 C2 编译器(吞吐/峰值性能)。
- 仅供测试/调试/研究使用,不建议生产环境直接启用。
后续演进
- Java 11:Graal 继续作为实验性选项。
- GraalVM:Oracle 发布独立的 GraalVM 发行版,包含原生镜像、多语言运行时、高性能编译器,适合云原生与微服务场景。
- Java 17+:Graal JIT 逐步成熟,部分场景已可媲美 C2,但仍默认关闭。
开发者建议
若对编译器技术、多语言运行时、原生镜像感兴趣,可在测试环境尝试 Graal;生产系统请继续使用默认 C2 编译器,或评估 GraalVM Enterprise 版本。
java
- 精通 Java 运算符:类型、语法与实战示例
- Java 注释:类型、用法与最佳实践
- 精通 Java if…else:控制流全解析
- 精通 Java 增强 for 循环:语法、示例与最佳实践
- 精通 Java 字符串:创建、方法与最佳实践
- 精通 Java 接口:概念、实现与最佳实践
- 精通 Java 匿名内部类:定义、语法与实战示例
- 精通 Java Try-With-Resources:自动资源管理详解
- Java 注解详解:类型、放置位置与实战示例
- Java 断言实战指南:尽早发现 Bug 与保障代码可靠性
- 深入理解 Java Vector:用法、特性及与 ArrayList 的对比
- Java 10 解锁实验性 Graal JIT 编译器