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

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/www.graalvm.org\/","title":"","type":null},"content":[{"type":"text","text":"GraalVM"}]},{"type":"text","text":"21.0主版本发布了,包含了一个新组件"},{"type":"link","attrs":{"href":"https:\/\/www.graalvm.org\/java-on-truffle\/","title":"","type":null},"content":[{"type":"text","text":"Java on Truffle"}]},{"type":"text","text":",该组件提供了一个用Java开发的Java虚拟机(JVM)。GraalVM本身是一个多语言虚拟机,提供了一个共享的运行时来执行用Java、Python和JavaScript等多种语言开发的应用程序。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在这个版本发布之前,在想在GraalVM上运行Java应用程序,可以使用带有GraalVM即时编译器(JIT)的Java HotSpot VM或者使用GraalVM原生镜像将代码编译成原生可执行文件。新版本的Java on Truffle(一个基于"},{"type":"link","attrs":{"href":"https:\/\/www.graalvm.org\/graalvm-as-a-platform\/language-implementation-framework\/","title":"","type":null},"content":[{"type":"text","text":"Truffle框架"}]},{"type":"text","text":"、使用Java开发的JVM)为运行Java应用程序提供了额外的选项。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Java on Truffle(代号Espresso)可以通过GraalVM更新程序gu来安装。gu是一个包管理器,用于下载和安装GraalVM核心发行版中不包含的包。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"codeblock","attrs":{"lang":"plain"},"content":[{"type":"text","text":"gu install espresso\n"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"要通过Java on Truffle来运行Java应用程序,需要向Java命令传递-truffle选项。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"codeblock","attrs":{"lang":"plain"},"content":[{"type":"text","text":"java -truffle -jar awesomeApp.jar\n"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Java on Truffle是一种小型JVM,提供了JVM的所有核心组件,比如字节码解释器、Java本地接口(JNI)和Java调试线协议(JDWP)。它实现了Java运行时环境库(libjvm.so) API,重用了所有必需的GraalVM JAR包和原生库。就像传统的JVM一样,Java on Truffle也支持运行其他基于JVM的语言,比如Kotlin。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/9f\/9f172e848404dd994c6b70b2f0b1fb13.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","text":"图片来源:"},{"type":"link","attrs":{"href":"https:\/\/miro.medium.com\/max\/1400\/1*fWeivN_3IbdjJ9GkJXxHzA.png","title":"","type":null},"content":[{"type":"text","text":"GraalVM博客"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"因为它是用Java实现的,并且能够运行Java,所以Java on Truffle本质上是自托管的Java或Java on Java。这为研究和创新JVM提供了有趣的机会,因为Java开发人员可以阅读和理解JVM源代码,并对其加以改进。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"下面是Java on Truffle提供的一些值得注意的特性和好处:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在调试会话期间,利用增强的HotSwap功能在运行时修改方法、Lambda和类的访问修饰符。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"能够运行不同于主机JVM的Java字节码版本。例如,可以通过"},{"type":"link","attrs":{"href":"https:\/\/www.graalvm.org\/sdk\/javadoc\/org\/graalvm\/polyglot\/package-summary.html","title":"","type":null},"content":[{"type":"text","text":"Polyglot API"}]},{"type":"text","text":"在Java 11应用程序中调用Java 8的库。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"将宿主JVM和在Truffle上运行的Java应用程序隔离,运行不是很可信的访客代码。在这里,“宿主”和“访客”用来区分执行Java的不同的层。Java on Truffle是访客层。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Java应用程序可以与JavaScript和Python等非JVM语言直接互操作,并在相同的内存空间中来回传递数据。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"可以利用Truffle框架提供的标准工具。例如,可以使用CPU采样器分析工具来查看Java应用程序的哪个部分占用更多的CPU时间。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"构建预先编译(AOT)的Java原生镜像,动态加载和运行Java代码,使用Espresso的JIT编译器。例如,CI\/CD应用程序(如Jenkins)可以被构建成原生镜像,同时又可以动态加载任意插件。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/04\/04f9d9f030ca4da273875a0d4b8d1e54.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","text":"图片来源:"},{"type":"link","attrs":{"href":"https:\/\/miro.medium.com\/max\/1400\/1*c2VdWWLv_xc0jH1OVnuObw.png","title":"","type":null},"content":[{"type":"text","text":"GraalVM博客"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"GraalVM提供了一组"},{"type":"link","attrs":{"href":"https:\/\/www.graalvm.org\/reference-manual\/java-on-truffle\/demos\/","title":"","type":null},"content":[{"type":"text","text":"演示应用程序"}]},{"type":"text","text":"来展示这些特性和好处。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"需要注意的是,Java on Truffle是一个实验性组件,还不能用于生产环境中。Java on Truffle当前版本的峰值性能比常规JVM慢了好几倍,但在后续版本中将得到改进。下面是一些值得注意的Java on Truffle限制,这些限制可能会在GraalVM的未来版本中得到解决:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"没有实现JVM工具接口(JVMTI)。不支持对应的“-agentlib”和“-agentpath”虚拟机选项。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"没有实现java.lang.instrument接口。不支持对应的“-javaagent”虚拟机选项。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"实现了部分Java管理扩展(JMX),有些方法可能只返回部分数据。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"除了Java on Truffle之外,新版本还增强了其他功能。例如,现在允许在原生镜像二进制文件中使用Java序列化。在构建原生镜像之前,可以使用javaagent自动生成序列化配置。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"新版本的GraalVM还为Ruby、Python和LLVM发行版提供了一些兼容性和运行时改进。GraalVM的WebAssembly语言实现("},{"type":"link","attrs":{"href":"https:\/\/www.graalvm.org\/reference-manual\/wasm\/","title":"","type":null},"content":[{"type":"text","text":"GraalWasm"}]},{"type":"text","text":")也得到了优化,提升了预热时间和WebAssembly的整体解释峰值性能。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"GraalVM社区版的Java版本更新了,基于OpenJDK 1.8.0_282和OpenJDK 11.0.10。GraalVM的Node.js版已经更新到12.20.1。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在工具方面,GraalVM 21.0附带了一个改进的gu工具,可以更简单地进行版本更新。Visual Studio Code的"},{"type":"link","attrs":{"href":"https:\/\/medium.com\/graalvm\/graalvm-21-0-vs-code-extensions-released-ab196354faeb","title":"","type":null},"content":[{"type":"text","text":"GraalVM扩展包"}]},{"type":"text","text":"也已经发布,帮助开发和调试基于GraalVM的应用程序。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"原文链接"},{"type":"text","text":":"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/www.infoq.com\/news\/2021\/01\/graalvm-21-jvm-java\/","title":"","type":null},"content":[{"type":"text","text":"GraalVM 21.0 Introduces a JVM Written in Java"}]}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章