GraalVM21.0 主版本发布了,包含了一个新组件Java on Truffle,该组件提供了一个用 Java 开发的 Java 虚拟机(JVM)。GraalVM 本身是一个多语言虚拟机,提供了一个共享的运行时来执行用 Java、Python 和 JavaScript 等多种语言开发的应用程序。

在这个版本发布之前,在想在 GraalVM 上运行 Java 应用程序,可以使用带有 GraalVM 即时编译器(JIT)的 Java HotSpot VM 或者使用 GraalVM 原生镜像将代码编译成原生可执行文件。新版本的 Java on Truffle(一个基于Truffle框架、使用 Java 开发的 JVM)为运行 Java 应用程序提供了额外的选项。

Java on Truffle(代号 Espresso)可以通过 GraalVM 更新程序 gu 来安装。gu 是一个包管理器,用于下载和安装 GraalVM 核心发行版中不包含的包。

gu install espresso

要通过 Java on Truffle 来运行 Java 应用程序,需要向 Java 命令传递-truffle 选项。

java -truffle -jar awesomeApp.jar

Java on Truffle 是一种小型 JVM,提供了 JVM 的所有核心组件,比如字节码解释器、Java 本地接口(JNI)和 Java 调试线协议(JDWP)。它实现了 Java 运行时环境库(libjvm.so) API,重用了所有必需的 GraalVM JAR 包和原生库。就像传统的 JVM 一样,Java on Truffle 也支持运行其他基于 JVM 的语言,比如 Kotlin。

虚拟机nat设置方法(GraalVM21发布引入使用Java开发的虚拟机)(1)

图片来源:GraalVM博客

因为它是用 Java 实现的,并且能够运行 Java,所以 Java on Truffle 本质上是自托管的 Java 或 Java on Java。这为研究和创新 JVM 提供了有趣的机会,因为 Java 开发人员可以阅读和理解 JVM 源代码,并对其加以改进。

下面是 Java on Truffle 提供的一些值得注意的特性和好处:

虚拟机nat设置方法(GraalVM21发布引入使用Java开发的虚拟机)(2)

图片来源:GraalVM博客

GraalVM 提供了一组演示应用程序来展示这些特性和好处。

需要注意的是,Java on Truffle 是一个实验性组件,还不能用于生产环境中。Java on Truffle 当前版本的峰值性能比常规 JVM 慢了好几倍,但在后续版本中将得到改进。下面是一些值得注意的 Java on Truffle 限制,这些限制可能会在 GraalVM 的未来版本中得到解决:

除了 Java on Truffle 之外,新版本还增强了其他功能。例如,现在允许在原生镜像二进制文件中使用 Java 序列化。在构建原生镜像之前,可以使用 javaagent 自动生成序列化配置。

新版本的 GraalVM 还为 Ruby、Python 和 LLVM 发行版提供了一些兼容性和运行时改进。GraalVM 的 WebAssembly 语言实现(GraalWasm)也得到了优化,提升了预热时间和 WebAssembly 的整体解释峰值性能。

GraalVM 社区版的 Java 版本更新了,基于 OpenJDK 1.8.0_282 和 OpenJDK 11.0.10。GraalVM 的 Node.js 版已经更新到 12.20.1。

在工具方面,GraalVM 21.0 附带了一个改进的 gu 工具,可以更简单地进行版本更新。Visual Studio Code 的GraalVM扩展包也已经发布,帮助开发和调试基于 GraalVM 的应用程序。

原文链接

GraalVM 21.0 Introduces a JVM Written in Java

https://www.infoq.com/news/2021/01/graalvm-21-jvm-java/

延伸阅读:

InfoQ编程语言1月排行榜结果出炉,我们有五个重要发现-InfoQ

关注我并转发此篇文章,即可获得学习资料~若想了解更多,也可移步InfoQ官网,获取InfoQ最新资讯~

,