高性能Java虚拟机GraalVM介绍

今天花5分钟带大家了解一下Oracle出品的新一代高性能跨语言虚拟机,GraalVM(读音是:哥绕VM)。

是的,这款虚拟机支持多语言:

  • Java
  • NodeJs
  • Ruby

支持多语言的原因是因为他们有一个愿景:将多个编程语言放到同一个运行环境无缝调用。不过似乎有这个需求的人不多。那么为什么要用GraalVM呢?因为启动速度更快、占用内存更小、运行不依赖jdk环境!

在传统JVM中,运行代码需要经过一下流程:

传统JVM

而如果使用GraalVM的AOT编译能帮你直接得到机器码!

GraalVM编译

1.实战

步骤一:安装GraalVM。(和安装jdk方法一样)

步骤二:运行“gu install native-image”命令,安装编译工具。

步骤三:编译

1
2
javac HelloWorld.java//打包之后的成品大小
11Mbnative-image HelloWorld

第四步:直接运行机器码(速度非常慢)

1
2
./helloworld
Hello, World!

2.内存占用

在使用Spring Boot2.4启动之后的内存占用如下:

**是否使用GraalVM ** 内存占用 启动时间
480.965MB 1135 ms
24.8203MB 215 ms

3. 缺点

直接打包成机器码确实能够减少内存占用并且缩短启动时间。但这一切都是有代价的。一旦使用native-image的方式编译成字节码,那么项目中就无法再使用反射。因为在编译阶段,就需要确定所有程序的类型。