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