GraalVM 19.2 发布,高性能跨语言虚拟机

afterer
 afterer
发布于 2019年08月22日
收藏 24

GraalVM 19.2 发布了。GraalVM 是高性能跨语言虚拟机,用于运行 JavaScript、Python 3、Ruby、R、基于 JVM 的语言,如 Java、Scala、Kotlin 和基于 LLVM 的语言,如 C 和 C++。

该版本带来了改进的配置文件引导的优化、包括 LLVM 工具链、带有 Java Flight Recorder 支持的增强的 VisualVM、新的 Visual Studio Code 预览插件、更好的本机图像峰值性能等等。

配置文件引导的优化

在 JVM 上运行的 GraalVM JIT 模式适合高峰值性能,因为它能够在启动期间收集运行时信息,并使用它优化机器代码。GraalVM AOT 模式在启动时和内存消耗方面都很好,但由于缺少运行时信息而提供了较低的峰值性能。

为了缓解这种情况,GraalVM 团队为 GraalVM 企业版实现了概要文件引导的优化(PGO, profile-guided optimizations )。使用 PGO,可以预先收集分析数据,然后将其提供给 GraalVM 本机映像实用程序,后者将使用这些信息优化生成的二进制文件的性能。

从 19.2 开始,可以在编译的模式下运行应用程序时为 PGO 收集数据:

$ /graal-ee-19.2.0/bin/java -Dgraal.PGOInstrument=myclass.iprof MyClass
$ /graal-ee-19.2.0/bin/native-image --pgo=myclass.iprof MyClass
$ ./myclass

Java Flight Recorder

Java Flight Recorder(JFR)是一种用于收集有关运行中的 Java 应用程序的诊断和分析数据的工具。它收集发生在 JVM 或 Java 应用程序中特定时间点的事件的数据。

绑定 GraalVM 的 VisualVM 工具现在是支持预览,用于可视化 Java Flight Recorder 文件的数据。

要启用 JFR 支持,首先运行 $GRAALVM_HOME/bin/jvisual alvm 来启动 VisualVM。使用 Tools | Plugins | Available Plugins 列出所有可用插件,并安装VisualVM-JFR 和 VisualVM-JFR-Generic 模块。JFR 快照可以使用 File | Load…打开操作或双击 JFR 快照节点,并将快照永久添加到 JFR 存储库中。

性能改进

在所有配置中都有轻微的性能改进。一个主要的更新是改进了 GraalVM Enterprise Edition 中本机映像的默认吞吐量。

在运行 Micronaut GraalVM 示例时测量了结果,而没有任何概要文件引导的优化。对于 100 万个请求,花费了大约 10% 的 CPU 时间,并且在 19.2 秒内实现了每 CPU 请求的 10% 的高吞吐量。吞吐量仍然低于 GraalVM 的 JIT 配置,但在将 AOT 配置提高到相同水平方面继续取得进展。

LLVM 工具链

GraalVM 发行版包括 LLVM Bitcode 引擎,它可以执行 C/C++ 和其他可以编译为 LLVM Bitcode 的语言。虽然将 C/C++ 编译成 Bitcode 是可以使用标准的 LLVM 工具(clang、llvm-link 等)的,但如果是链接和构建系统,则会非常棘手。工具链旨在简化这一过程,在构建针对 GraalVM LLVM 运行时的本机项目时,为编译器提供开箱即用的插入替代。

首先,下载 GraalVM 19.2,然后通过工具链运行一个示例“Hello World!”C++ 程序,操作:

$ $GRAALVM_HOME/jre/languages/llvm/native/bin/clang++ hello-c++.cpp -o hello
$ $GRAALVM_HOME/bin/lli hello

Visual Studio Code 的 GraalVM 扩展

第一个实验性的 VS Code 扩展,为在 GraalVM 上运行的编辑和调试程序提供了基本支持。

下载地址:

https://www.graalvm.org/downloads/

发布说明

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 OSCHINA 社区 [http://www.oschina.net]
本文标题:GraalVM 19.2 发布,高性能跨语言虚拟机
加载中

精彩评论

意简美
意简美
是这个 https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/java-substratevm.html
性能比现在的jdk差太多

最新评论(16

炜铭粑粑
炜铭粑粑
跨语言,PHP能跨不? --------PHP是世界上最好的语言,:bowtie:
兮若
兮若
高性能 我对这三个字表示深度怀疑
s
shifeng1983
我对你的水平表示怀疑,自己看一下吧
https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/java.html
意简美
意简美
是这个 https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/java-substratevm.html
性能比现在的jdk差太多
晒太阳的小猪
晒太阳的小猪
自由开源GPL吗?
开源中国首席罗纳尔多
开源中国首席罗纳尔多
您好,请问为什么它能运行这么多语言?
s
shifeng1983
所有的语言都编译成java字节码
开源中国首席罗纳尔多
开源中国首席罗纳尔多
其他c和c++等底层语言能编译成java吗?
s
shifeng1983
可以,所有语言最终都会编译成机器码,java虚拟机就相当于机器,java字节码码就是这个机器的机器码,java虚拟就是抽象出来的一个统一的机器
paddy235
paddy235
我不相信一个垃圾程序员的代码也能表现的如此性能描述
dwingo
dwingo
Windows的支持还是问题多多, 不过看好以后的发展
Tinian
Tinian
不太懂,我是可以在java程序里调JS等语言的接口了?
花间一壶酒___
java很早都内置了js引擎,可以直接执行js代码
三千水军保裆
三千水军保裆
为什么编译好的native images没有JIT性能高呢?
s
shifeng1983
JIT会根据运行情况不断地动态调整,并不是编译一遍就完事,如果虚拟机认为现在的执行效率不好,有可能重新再用他认为的更优化策略在编译一遍
s
shifeng1983
准备企业版发力了?
返回顶部
顶部