GraalVM基本介绍

GraalVM 是一种高性能 JDK,旨在加速用 Java 和其他 JVM 语言编写的应用程序的执行,同时还为 JavaScript、Python 和许多其他流行语言提供运行时。 GraalVM 提供两种运行 Java 应用程序的方法:在 HotSpot JVM 上使用 Graal 即时 (JIT) 编译器或作为提前 (AOT) 编译的本机可执行文件。 GraalVM 的多语言能力使得在单个应用程序中混合多种编程语言成为可能,同时消除了外语调用成本。
此页面提供了 GraalVM 的架构概述及其运行时模式、支持的平台、可用的发行版、核心和附加功能以及各种功能的支持级别。
GraalVM架构

GraalVM 向 HotSpot Java 虚拟机添加了一个用 Java 编写的 高级即时 (JIT) 优化编译器 。
除了运行 Java 和基于 JVM 的语言外, GraalVM 的语言实现框架(Truffle) 使得在 JVM 上运行 JavaScript、Ruby、Python 和许多其他流行语言成为可能。 借助 GraalVM Truffle,Java 和其他支持的语言可以直接相互操作并在同一内存空间来回传递数据。
运行时模式
GraalVM 是独一无二的运行时环境,提供多种操作模式:JVM 运行时模式、Native Image、Java on Truffle(相同的 Java 应用程序可以在任一模式上运行)。
JVM运行时模式
在 HotSpot JVM 上运行程序时,GraalVM 默认使用 GraalVM 编译器作为顶层 JIT 编译器。 在运行时,应用程序在 JVM 上正常加载和执行。 JVM 将 Java 或任何其他 JVM 本地语言的字节码传递给编译器,编译器将其编译为机器代码并将其返回给 JVM。 在 Truffle 框架之上编写的支持语言的解释器本身就是在 JVM 上运行的 Java 程序。
原生镜像
Native Image 是一项创新技术,可将 Java 代码编译成独立的本机可执行文件或本机共享库。 在构建本机可执行文件期间处理的 Java 字节码包括所有应用程序类、依赖项、第三方依赖库和任何所需的 JDK 类。 生成的自包含本机可执行文件特定于不需要 JVM 的每个单独的操作系统和机器体系结构。
Java on Truffle
Java on Truffle 是 Java 虚拟机规范的实现,使用 Truffle 语言实现框架构建。 它是一个完整的 Java VM,包括所有核心组件,实现与 Java 运行时环境库相同的 API,并重用 GraalVM 中的所有 JAR 和本机库。
可用发行版
GraalVM 可作为 GraalVM Enterprise 和 GraalVM Community 版本使用,包括对 Java 11 和 Java 17 的支持。GraalVM Enterprise 基于 Oracle JDK,而 GraalVM Community 基于 OpenJDK。
GraalVM 适用于 x86 64 位和 AArch64 系统上的 Linux 和 macOS,以及 x86 64 位架构上的 Windows。 根据平台的不同,发行版以 .tar.gz 或 .zip 存档形式提供。 有关安装说明,请参阅 入门指南 。
相关组件列表
GraalVM 由核心组件和附加组件组成。 核心组件支持使用 GraalVM 作为以基于 JVM 的语言编写的程序或可嵌入的多语言应用程序的运行时平台。
核心组件
Java HotSpot虚拟机
Graal 编译器——顶级的 JIT 编译器
Polyglot API——用于在共享运行时中组合编程语言的 API
GraalVM Updater – 用于安装附加功能的实用程序
其他组件
可以使用更多语言运行时和实用程序扩展 GraalVM 核心安装。
Tools/Utilities:
- Native Image——一种提前将应用程序编译为本地平台可执行文件的技术。
- LLVM 工具链——一组工具和 API,用于将本机程序编译为可在 GraalVM 上执行的位码。
Runtimes:
- 带有 JavaScript REPL 和 JavaScript 解释器的 JavaScript 运行时
- Node.js – 适用于 JavaScript 的 Node.js 16.14.2 运行时
- 带有 lli 工具的 LLVM 运行时直接从 LLVM 位码执行程序