GraalVM
GraalVM 是目前的高性能嵌入式多语言虚拟机
支持多种编程语言:Java(和 JVM 语言)、
JavaScript(包括node.js)、Ruby、R、Python和C/C++等语言
与 LLVM 后端。
您可以在此处下载 GraalVM 的预构建发行版:https://www.graalvm.org/downloads https://www.graalvm.org/downloads。
其中包括 java 运行时、node 运行时、称为 Graal.js 的 JavaScript 引擎等。
谷歌SDK是多语言 API,允许 GraalVM 与其可以运行的所有语言实现一起使用。
这个多语言 API 打包为 jar 文件:$GRAALVM_HOME/jre/lib/boot/graal-sdk.jar
.
将该文件作为外部库添加到您的 IDEA 项目/模块中,将允许 IDE 找到如下类:org.graalvm.polyglot.Context
and org.graalvm.polyglot.Value
与语言互操作所必需的,包括
JavaScript 实现。
如果您的项目使用 Maven,您可以在该文件上添加系统依赖项,maven 会在任何存在该文件的系统上找到它$JAVA_HOME
设置为指向 GraalVM 发行版。
<dependency>
<groupId>org.graalvm</groupId>
<artifactId>graal-sdk</artifactId>
<version>1.0.0-rc</version>
<scope>system</scope>
<systemPath>${java.home}/lib/boot/graal-sdk.jar</systemPath>
</dependency>
现在当你运行java
来自 GraalVM 发行版的命令,必要的文件将自动添加到类路径中。
因此,无需再在 IDE 中运行类似以下内容:
import org.graalvm.polyglot.*;
public class Main {
public static void main(String[] args) {
Context polyglot = Context.create();
Value array = polyglot.eval("js", "[1,2,42,4]");
System.out.println(array.getArrayElement(2).asInt());
}
}
这是因为 GraalVM 默认启用了 Graal.js JavaScript 引擎。
如果您想在普通 JDK 上运行它,您需要向类路径添加更多内容。
在普通 JDK 上运行 Graal.js**
有一个关于如何在普通 JDK 上运行 Graal.js 的问题:如何使用graaljs?有没有地方可以获取 .jar 文件? https://stackoverflow.com/questions/50738198/how-to-use-graaljs-is-there-a-place-where-to-get-a-jar-file-files。
接受的答案更详细地说明了在哪里可以找到必要的 jar 文件以使其在 Java 8 上工作。
简而言之,您需要将以下 jar 文件添加到类路径中才能使其实际运行:
- graal-sdk.jar -GraalVM 多语言 API https://www.graalvm.org/sdk/javadoc/org/graalvm/polyglot/package-summary.html
- truffle-api.jar - 用于语言实现的 API。
-
graaljs.jar- 这是 GraalVM 的 JavaScript 引擎的实现
- graaljs-scriptengine.jar —— 允许通过 Java 脚本引擎 API 使用 Graal.js。
- graaljs-launcher.jar
- tregex.jar——正则表达式库
- truffle-profiler.jar - Truffle 语言实现的分析器
- chromeinspector.jar - 调试器集成
- 启动器-common.jar
您可以在您使用的 GraalVM 发行版中找到它们下载的 https://www.graalvm.org/downloads,两个版本都可以正常工作。
如果没有 Graal 编译器,JavaScript 引擎的性能将无法达到最佳。
正如您自己提到的,JDK 11 附带了 Graal 的快照compiler(不是 GraalVM,它是 GraalVM 项目的完整发行版,包括 JS 引擎、LLVM 位码解释器、节点实现、JVM 等)。您可以通过传递来启用 Graal 编译器--XX:+UnlockExperimentalVMOptions --XX:+UseJVMCICompiler
to the java
命令。
现在全部在 JDK 11 上运行might不起作用,因为 JDK 11 与 JDK 8 有很大不同,并且模块系统可能存在问题或缺少某些内容(例如 jax-b),但它也可能起作用。它可以在 JDK 8 上运行。