GraalVM 21发布,引入使用Java开发的虚拟机

GraalVM21.0主版本发布了 , 包含了一个新组件JavaonTruffle , 该组件提供了一个用Java开发的Java虚拟机(JVM) 。 GraalVM本身是一个多语言虚拟机 , 提供了一个共享的运行时来执行用Java、Python和JavaScript等多种语言开发的应用程序 。
在这个版本发布之前 , 在想在GraalVM上运行Java应用程序 , 可以使用带有GraalVM即时编译器(JIT)的JavaHotSpotVM或者使用GraalVM原生镜像将代码编译成原生可执行文件 。 新版本的JavaonTruffle(一个基于Truffle框架、使用Java开发的JVM)为运行Java应用程序提供了额外的选项 。
JavaonTruffle(代号Espresso)可以通过GraalVM更新程序gu来安装 。 gu是一个包管理器 , 用于下载和安装GraalVM核心发行版中不包含的包 。
guinstallespresso要通过JavaonTruffle来运行Java应用程序 , 需要向Java命令传递-truffle选项 。
java-truffle-jarawesomeApp.jarJavaonTruffle是一种小型JVM , 提供了JVM的所有核心组件 , 比如字节码解释器、Java本地接口(JNI)和Java调试线协议(JDWP) 。 它实现了Java运行时环境库(libjvm.so)API , 重用了所有必需的GraalVMJAR包和原生库 。 就像传统的JVM一样 , JavaonTruffle也支持运行其他基于JVM的语言 , 比如Kotlin 。

GraalVM 21发布,引入使用Java开发的虚拟机
文章图片
图片来源:GraalVM博客
因为它是用Java实现的 , 并且能够运行Java , 所以JavaonTruffle本质上是自托管的Java或JavaonJava 。 这为研究和创新JVM提供了有趣的机会 , 因为Java开发人员可以阅读和理解JVM源代码 , 并对其加以改进 。
下面是JavaonTruffle提供的一些值得注意的特性和好处:
在调试会话期间 , 利用增强的HotSwap功能在运行时修改方法、Lambda和类的访问修饰符 。 能够运行不同于主机JVM的Java字节码版本 。 例如 , 可以通过PolyglotAPI在Java11应用程序中调用Java8的库 。 将宿主JVM和在Truffle上运行的Java应用程序隔离 , 运行不是很可信的访客代码 。 在这里 , “宿主”和“访客”用来区分执行Java的不同的层 。 JavaonTruffle是访客层 。 Java应用程序可以与JavaScript和Python等非JVM语言直接互操作 , 并在相同的内存空间中来回传递数据 。 可以利用Truffle框架提供的标准工具 。 例如 , 可以使用CPU采样器分析工具来查看Java应用程序的哪个部分占用更多的CPU时间 。 构建预先编译(AOT)的Java原生镜像 , 动态加载和运行Java代码 , 使用Espresso的JIT编译器 。 例如 , CI/CD应用程序(如Jenkins)可以被构建成原生镜像 , 同时又可以动态加载任意插件 。
GraalVM 21发布,引入使用Java开发的虚拟机
文章图片
图片来源:GraalVM博客
GraalVM提供了一组演示应用程序来展示这些特性和好处 。
需要注意的是 , JavaonTruffle是一个实验性组件 , 还不能用于生产环境中 。 JavaonTruffle当前版本的峰值性能比常规JVM慢了好几倍 , 但在后续版本中将得到改进 。 下面是一些值得注意的JavaonTruffle限制 , 这些限制可能会在GraalVM的未来版本中得到解决:
没有实现JVM工具接口(JVMTI) 。 不支持对应的“-agentlib”和“-agentpath”虚拟机选项 。 没有实现java.lang.instrument接口 。 不支持对应的“-javaagent”虚拟机选项 。 实现了部分Java管理扩展(JMX) , 有些方法可能只返回部分数据 。除了JavaonTruffle之外 , 新版本还增强了其他功能 。 例如 , 现在允许在原生镜像二进制文件中使用Java序列化 。 在构建原生镜像之前 , 可以使用javaagent自动生成序列化配置 。
新版本的GraalVM还为Ruby、Python和LLVM发行版提供了一些兼容性和运行时改进 。 GraalVM的WebAssembly语言实现(GraalWasm)也得到了优化 , 提升了预热时间和WebAssembly的整体解释峰值性能 。
GraalVM社区版的Java版本更新了 , 基于OpenJDK1.8.0_282和OpenJDK11.0.10 。 GraalVM的Node.js版已经更新到12.20.1 。
在工具方面 , GraalVM21.0附带了一个改进的gu工具 , 可以更简单地进行版本更新 。 VisualStudioCode的GraalVM扩展包也已经发布 , 帮助开发和调试基于GraalVM的应用程序 。
原文链接:
GraalVM21.0IntroducesaJVMWritteninJava
https://www.infoq.com/news/2021/01/graalvm-21-jvm-java/
延伸阅读:
InfoQ编程语言1月排行榜结果出炉 , 我们有五个重要发现-InfoQ
GraalVM 21发布,引入使用Java开发的虚拟机】关注我并转发此篇文章 , 即可获得学习资料~若想了解更多 , 也可移步InfoQ官网 , 获取InfoQ最新资讯~