- 适用于 JDK 24 的 GraalVM(最新)
- 适用于 JDK 25 的 GraalVM(早期访问)
- 适用于 JDK 21 的 GraalVM
- 适用于 JDK 17 的 GraalVM
- 存档
- 开发构建
作为 Java 虚拟机的 GraalVM
GraalVM 基于 Java HotSpot 虚拟机,因此任何在 Java HotSpot 虚拟机上运行的应用程序都可以在 GraalVM 上运行。
GraalVM 包含一个用 Java 编写的高级编译器,称为 Graal 编译器。在运行时,与任何其他 Java 虚拟机 (JVM) 一样,GraalVM 加载应用程序并分析其代码以检测性能瓶颈或热点。GraalVM 将性能关键代码传递给 Graal 即时 (JIT) 编译器,该编译器将其编译为机器代码并返回。
Graal 编译器通过其独特的代码分析和优化方法,可以提高用 Java、Scala、Kotlin 或其他 JVM 语言编写的应用程序的效率和速度。例如,由于它能够消除昂贵的对象分配,因此确保了高度抽象的应用程序的性能优势。有关平台无关的编译器优化的更多信息,请参阅 GraalVM 社区版 GitHub 存储库中的 CEOptimization enum
。
Graal (JIT) 编译器现在也已集成到 Java HotSpot 虚拟机中。欲了解更多信息,请参阅 Graal 编译器部分。
互操作性 #
GraalVM 还包括 Truffle 语言实现框架——一个用 Java 编写的库,用于为编程语言构建解释器,然后这些解释器在 GraalVM 上运行。这些“Graal 语言”因此可以受益于 Graal 编译器的优化可能性。此类编译的流程是
- Truffle 框架的代码和由抽象语法树 (AST) 表示的数据被部分评估以生成编译图。当这样的 AST 是“热的”(即,被多次调用)时,它会被编译器安排编译。
- 编译图由 Graal 编译器优化以生成机器代码。
- JVMCI 将此机器代码安装到 JVM 的代码缓存中。
- 一旦可用,AST 将自动将执行重定向到已安装的机器代码。
有关与其他编程语言互操作的更多信息,请参阅 多语言编程和 嵌入语言指南。
提前编译 #
除了 Truffle 框架之外,GraalVM 还将其编译器整合到先进的提前(AOT)编译技术——Native Image 中,该技术将 Java 和基于 JVM 的代码转换为本地平台可执行文件。这些本地可执行文件启动速度几乎是瞬时的,体积更小,并且比其 JVM 对应物消耗更少的资源,使其成为云部署和微服务的理想选择。有关 AOT 编译的更多信息,请参阅 Native Image。