当前位置: 首页 > 图灵资讯 > 技术篇> Spring6.0从入门到精通-什么是GraalVM

Spring6.0从入门到精通-什么是GraalVM

来源:图灵教育
时间:2024-01-15 13:27:32
 

什么是GraalVM

GraalVM旨在加速Java应用程序的性能,同时消耗更少的资源。GraalVM提供了两种运行Java应用程序的方式:在HotSpot JVM上使用Graal即时编译器或作为预先编译的本地可执行文件(AOT)。除了Java,它还提供了JavaScript、Ruby、Python和许多其他流行语言的运行时。GraalVM的多语言能力使得可以在单个应用程序中混合编程语言,同时消除不同语言之间调用的成本。

GraalVM文章推荐:https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzI3MDI5MjI1Nw==&action=getalbum&album_id=2761361634840969217&scene=173&from_msgid=2247484273&from_itemidx=1&count=3&nolastread=1#wechat_redirect

GraalVM体验

下载压缩包

打开https://Github.com/graalvm/graalvm-ce-builds/releases,按JDK版本下载GraalVM对应的压缩包,请下载Java 17对应的版本,不然后面运行SpringBoot3可能会有问题。

 

 

下载完后,就解压,

 

配置环境变量

 

 

新开一个cmd测试:

 

安装Visual Studio Build Tools

因为需要C语言环境,所以需要安装Visual Studio Build Tools。

 

打开visualstudio.microsoft.com,下载Visual Studio Installer。

 

选择C++桌面开发,和Windows 11 SDK,然后进行下载和安装,安装后重启操作系统。

 

要使用GraalVM,不能使用普通的windows自带的命令行窗口,得使用VS提供的 x64 Native Tools Command Prompt for VS 2019,如果没有可以执行C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvars64.bat脚本来安装。

 

安装完之后其实就可以在 x64 Native Tools Command Prompt for VS 2019中去使用native-image命令去进行编译了。

 

但是,如果后续在编译过程中编译失败了,出现以下错误:

 

那么可以执行cl.exe,如果是中文,那就得修改为英文。

 

通过Visual Studio Installer来修改,比如:

可能一开始只选择了中文,手动选择英文,去掉中文,然后安装即可。

 

再次检查

 

这样就可以正常的编译了。

 

Hello World实战

新建一个简单的Java工程:

 

我们可以直接把graalvm当作普通的jdk的使用

 

我们也可以利用native-image命令来将字节码编译为二进制可执行文件。

 

打开x64 Native Tools Command Prompt for VS 2019,进入工程目录下,并利用javac将java文件编译为class文件:javac -d . src/com/zhouyu/App.java

 

此时的class文件因为有main方法,所以用java命令可以运行

 

我们也可以利用native-image来编译:

编译需要一些些。。。。。。。时间。

 

编译完了之后就会在当前目录生成一个exe文件:

 

我们可以直接运行这个exe文件:

 

并且运行这个exe文件是不需要操作系统上安装了JDK环境的。

 

我们可以使用-o参数来指定exe文件的名字:

native-image com.zhouyu.App -o app

GraalVM的限制

GraalVM在编译成二进制可执行文件时,需要确定该应用到底用到了哪些类、哪些方法、哪些属性,从而把这些代码编译为机器指令(也就是exe文件)。但是我们一个应用中某些类可能是动态生成的,也就是应用运行后才生成的,为了解决这个问题,GraalVM提供了配置的方式,比如我们可以在编译时告诉GraalVM哪些方法会被反射调用,比如我们可以通过reflect-config.json来进行配置。