GraalVM,下一代JVM

Posted IT圈里的那些事儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GraalVM,下一代JVM相关的知识,希望对你有一定的参考价值。

GraalVM——高性能多语言VM

GraalVM是一个通用虚拟机,可以运行基于JVM的语言编写的应用程序,如Java,Scala,Kotlin,Clojure等以及基于LLVM的语言,如C和C ++。奇妙的是GraalVM还可以运行非JVM语言,如javascript,Python,Ruby,R。

GraalVM消除了编程语言之间的隔离,并在共享运行时中实现了互操作性。它既可以独立运行,也可以在OpenJDK,Node.js,Oracle,mysql中运行。

GraalVM的优势

多语种

编程语言之间的零开销互操作性允许您编写多语言应用程序并为您的任务选择最佳语言。

下面是一段JavaScript与Java的混合代码

 
   
   
 
  1. const express = require('express');

  2. const app = express();

  3. app.listen(3000);

  4. app.get('/', function(req, res) {

  5.  var text = 'Hello World!';

  6.  const BigInteger = Java.type(

  7.    'java.math.BigInteger');

  8.  text += BigInteger.valueOf(2)

  9.    .pow(100).toString(16);

  10.  text += Polyglot.eval(

  11.    'R', 'runif(100)')[0];

  12.  res.send(text);

  13. })

本地镜像

使用GraalVM编译的本机镜像可以缩短启动时间并减少基于JVM的应用程序的内存占用。

Talk is cheap. Show you the code

 
   
   
 
  1. $ javac HelloWorld.java

  2. $ time java HelloWorld

  3. user 0.070s

  4. $ native-image HelloWorld

  5. $ time ./helloworld

  6. user 0.005s

可以看出编译为本地镜像后,运行时间提高了14倍。当然,这只是一个简单的例子,14倍的性能也不是一个通用结果。

后续计划写个系列来测试GraalVM与JVM的差异。

嵌入式

GraalVM可以嵌入到托管和本机应用程序中。现有OpenJDK,Node.js,Oracle数据库和MySQL的集成可使用。

 
   
   
 
  1. import org.graalvm.polyglot.*;

  2. public class HelloPolyglot {

  3.  public static void main(String[] args) {

  4.    System.out.println("Hello Java!");

  5.    Context context = Context.create();

  6.    context.eval("js",

  7.      "print('Hello JavaScript!');");

  8.  }

  9. }

开始使用GraalVM吧!

GraalVM官网 https://www.graalvm.org

点击原文可进入GraalVM官网

以上是关于GraalVM,下一代JVM的主要内容,如果未能解决你的问题,请参考以下文章

下一代JVM:GraalVM的十大特性

下一代的多语言JVM:GraalVM

「作者推荐」JVM性能优化JDK/JVM的新储君—GraalVM和Quarkus

JVM技术专题JDK/JVM的新储君—GraalVM和Quarkus

GraalVM JVM 即时编译器GraalVM 21.2 发布,大量实用性改进

初探Oracle全栈虚拟机---GraalVM