GraalVM:新一代高性能跨语言虚拟机

上周Oracle发布了GraalVM [1]。如网站上所述:

高性能跨语言虚拟机

GraalVM是一种通用的虚拟机,用于运行JavaScript、Python 3、Ruby、R、基于JVM的语言,如Java、Scala、Kotlin和基于LLVM的语言,如C和C++。

GraalVM消除了编程语言之间的隔离,并支持共享运行时的互操作性。它可以独立运行,也可以在OpenJDK、Node、Oracle或者MySQL上运行。

有几个因素让人们想从正常的JRE转到Graal VM:

  1. 其中一个可能是它声称的改进的性能。

  2. 另一个可能是多语言特性,透明地混合和匹配支持的语言。

  3. 最后一个是前者的混合:在本地支持下,可以将Java应用程序作为本地代码。

作为一个极客,我想先快速地看一看。下面是我的一些使用体验。

是否用企业版?

第一步是下载Graal VM [2]。GraalVM有两个版本:

社区版

  • 所有开源许可

  • 免费供生产使用

企业版

  • 测评和其他非生产用途免费使用

  • 对于商业使用和支持选项,应该联系销售团队。

第一个比较惊讶的: 社区版本只能在Linux操作系统使用。对于OSX操作系统,只能使用企业版。目前还没有适用于Windows的版本。

Graal VM结构

Graal VM结构类似于传统的pre-9 Java JDK。

GraalVM:新一代高性能跨语言虚拟机

因此,GraalVM可以替代任何标准JDK。

运行 java –version输出结果如下:

GraalVM:新一代高性能跨语言虚拟机

PS: 到目前为止,GraalVM仅限于Java8功能。

一些性能基准

下一步是检查性能是否有改善。我使用JMH [3]框架来进行性能测试。

我使用以下代码:

GraalVM:新一代高性能跨语言虚拟机

使用java –jar target/benchmarks.jar命令分别在三个不同的JREs上进行测试。

GraalVM

GraalVM:新一代高性能跨语言虚拟机

Oracle JDK 8

GraalVM:新一代高性能跨语言虚拟机

Oracle JDK 9

GraalVM:新一代高性能跨语言虚拟机

总结:

GraalVM:新一代高性能跨语言虚拟机

通过数据可以得到:在性能方面,Graal VM和Java 8之间的差距并不显著。但它们和Java 9的差距比较明显。另外,Java 9有最高的标准偏差。

继续体验本地方法

GraalVM可以通过native-image命令将JAR转换为本地可执行文件。我尝试着用之前创建的JAR来测试。

native-image -H:+JNI -jartarget/benchmarks.jar

然而,在尝试运行新创建的二进制文件时,我遇到了下面的错误信息:

GraalVM:新一代高性能跨语言虚拟机

更糟糕的是,尝试为Spring Pet Clinic [4]创建本地镜像时,遇到下面的错误:

GraalVM:新一代高性能跨语言虚拟机
GraalVM:新一代高性能跨语言虚拟机GraalVM:新一代高性能跨语言虚拟机

GraalVM不支持动态类加载。

我尝试了H2和HSQLDB的独立jar文件,但没有用。在这两种情况下,我得到了以下堆栈:

GraalVM:新一代高性能跨语言虚拟机

结论

GraalVM有很多很有前途的功能,包括多语言,尽管我现在对它不太感兴趣。然而,从我有限的使用体验来看,它仍然有改进的空间。性能方面,Graal VM要好于Java9。此外,本地方法镜像在目前的状况下,用处比较有限。恕我直言,它目前还处在MVP的阶段。我急切地等待下一个版本,希望他们能在上面的问题上有所改进。

  • GraalVM主页 [1]

  • GraalVMgithub [5]


参考链接

[1] http://www.graalvm.org/

[2] https://www.graalvm.org/downloads

[3] http://openjdk.java.net/projects/code-tools/jmh/

[4] https://github.com/nfrankel/spring-petclinic

[5] https://github.com/oracle/graal

活动预告:

本期 GIAC 大会上,微服务部分精彩的议题如下:

GraalVM:新一代高性能跨语言虚拟机


分享到:


相關文章: