是什么

GraalVM 是 Oracle 主导的 高性能 JDK 发行版与工具链,基于 OpenJDK,但不止「又一个 Temurin」:它在同一产品里组合了 Java 运行时、Graal JIT 编译器、Native Image AOT、Truffle 多语言运行时 等能力。

日常讨论里常把 GraalVM 缩略成「Native Image 用的那个 JDK」,实际上 Native Image 只是其组件之一;完整图景见下文与 Java 虚拟机 生态对照。

发行版

版本 说明
Community Edition (CE) 开源(GPLv2 + Classpath exception),GitHub 发布
Enterprise Edition (EE) 商业支持,额外性能与工具(需 Oracle 许可)

安装后通常提供 java、javac、native-image、gu(GraalVM Updater,用于安装/管理组件)等命令。具体组件集因版本与安装方式而异。

三种常见使用方式

                         GraalVM 发行版
                               │
         ┌─────────────────────┼─────────────────────┐
         ▼                     ▼                     ▼
   JVM 模式(java)      Native Image           Truffle / Polyglot
   HotSpot + Graal JIT   AOT 本地二进制        JS/Python/Ruby 等同 JVM 上互操作
         │                     │
         │                     └── 见专文
         └── 仍跑 .class,可替代默认 C2 路径(视版本与 -XX 开关)

1. JVM 模式:Graal 作 JIT

用 GraalVM 自带的 java 跑字节码,底层仍是 HotSpot VM,但可用 Graal 编译器 作为 JIT 替代或补充传统 C1/C2(取决于 JDK 版本与 JVM 参数;OpenJDK 曾实验性集成 Graal JIT,JDK 17+ 默认路径以 C2 为主,Graal JIT 需显式启用或视发行版而定)。

  • 仍是 java -jar app.jar,生态与 HotSpot 大体兼容
  • 适合评估 Graal 编译器对特定负载的峰值性能,不是大多数团队的默认选型

2. Native Image:AOT 本地可执行文件

构建期将 Java 应用 AOT 编译为 不依赖完整 HotSpot 的本地二进制,运行时使用 Substrate VM。冷启动与内存占用是主要卖点;反射、动态加载等受限。

详见 GraalVM Native Image 简介。Spring Boot 3 走 Spring AOT + Native 构建链。

3. 多语言(Truffle)

Truffle 框架允许在 JVM 上高效运行 JavaScript、Python、Ruby 等,并与 Java 互操作。Polyglot API 可在同一进程内混用语言。本文不展开;Java 服务端选型通常只涉及前两种。

与 HotSpot / OpenJDK 的关系

维度 常见 OpenJDK(Temurin 等) GraalVM
规范 Java SE / JVM 规范 同样兼容,基于 OpenJDK 代码基
默认 java HotSpot + C1/C2 HotSpot + 可选 Graal JIT
Native 可执行文件 无(需另装 GraalVM 并跑 native-image) 有
诊断 jcmd、JFR、Attach 等 HotSpot 工具 JVM 模式类似;Native 路径不同

不要混用概念:说「我们上了 GraalVM」要澄清是 JVM 模式、Native Image 产物,还是仅 CI 里用 GraalVM JDK 做构建。Native 路径下没有传统 HotSpot JIT 预热与完整 -XX 调优空间,见 HotSpot JVM 简介 对比。

手段 层级 产物
jlink JPMS 模块裁剪 更小的 JRE + 仍用 java 跑字节码
JDK AOT 缓存(JEP 483 等) HotSpot 启动优化 训练后的缓存,缩短下次 JVM 冷启动
GraalVM Native Image 全量 AOT 编译 本地二进制,非 HotSpot 运行时
Spring AOT Spring 容器构建期处理 为 Native 或更快 JVM 启动生成 hint 与 bean 代码

何时考虑 GraalVM

目标 建议路径
默认服务端 REST 继续用 Temurin/Corretto + HotSpot
缩小容器 JRE jlink,不必上 GraalVM
毫秒级冷启动、Serverless GraalVM Native Image + Spring AOT
实验 JIT 峰值 GraalVM JVM 模式 + 压测验证

本站相关文档

主题 文章
GraalVM 总览 本文
Native Image 原理与用法 graalvm-native-image
Spring 构建期 AOT spring-aot
JVM 生态选型 jvm
HotSpot 专述 hotspot

参考