自JDK 10起,HotSpot中又加入了一个全新的即时编译器:Graal编译器,看名字就可以联想到它是来自于前一节提到的Graal VM。Graal编译器是作为C2编译器替代者的角色登场的,使用Java语音开发。
十大特性
- 高性能的现代Java
- 占用资源少,启动速度快
- JavaScript, Java, Ruby以及R混合编程
- 在JVM上运行原生语言
- 跨语言工具
- JVM应用扩展
- 原生应用扩展
- 本地Java库
- 数据库支持多语言
- 创建自己的语言
比较
内存占用少
启动速度快
环境搭建
1、下载软件,然后解压缩。
https://github.com/graalvm/graalvm-ce-builds/releases
2、设置环境变量
将GRAALVM_HOME和JAVA_HOME环境变量都设置到graalvm的根目录,同时设置PATH环境变量优先使用$GRAALVM_HOME/bin
3、列出当前已经安装的模块
$ gu list
ComponentId Version Component name Origin
--------------------------------------------------------------------------------
graalvm 19.3.0 GraalVM Core
4、查看当前可用模块
$ gu available
Downloading: Component catalog from www.graalvm.org
ComponentId Version Component name Origin
--------------------------------------------------------------------------------
llvm-toolchain 19.3.0 LLVM.org toolchain github.com
native-image 19.3.0 Native Image github.com
python 19.3.0 Graal.Python github.com
R 19.3.0 FastR github.com
ruby 19.3.0 TruffleRuby github.com
5、安装native-image模块
$ gu install native-image
Downloading: Component catalog from www.graalvm.org
Processing Component: Native Image
Downloading: Component native-image: Native Image from github.com
Installing new component: Native Image (org.graalvm.native-image, version 19.3.0)
1、此处可能无法下载native-image-installable-svm-java11-windows-amd64-21.0.0.2.jar。可以通过迅雷下载,然后通过命令安装
gu -L install C:\native-image-installable-svm-java11-windows-amd64-21.0.0.2.jar
2、Error: Default native-compiler executable 'cl.exe' not found via environment variable PATH
安装Visual Studio->选择单个组件``
3、Error compiling query code
安装通用Windows开发平台,添加INCLUDE和LIB环境变量,路径根据自己的实际情况换下。
INCLUDE=C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt;C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um;C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared;C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.27.29110\include;
LIB=C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\um\x64;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\ucrt\x64;C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.27.29110\lib\x64;
PATH=%PATH%;C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.27.29110\bin\Hostx64\x64;
SpringBoot集成GraalVm
创建项目
直接到spring官网生产一个最简单的SpringWeb项目spring创建项目
添加依赖
native依赖
<!--添加此依赖,可以通过在编译时创建候选对象的静态列表来提高大型应用程序的启动性能 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-indexer</artifactId>
</dependency>
<!--Graalvm-native 依赖 -->
<dependency>
<groupId>org.springframework.experimental</groupId>
<artifactId>spring-graalvm-native</artifactId>
<version>0.8.3</version>
</dependency>
maven native iamge插件
<plugin>
<groupId>org.graalvm.nativeimage</groupId>
<artifactId>native-image-maven-plugin</artifactId>
<version>21.0.0.2</version>
<configuration>
<skip>false</skip>
<imageName>${project.artifactId}</imageName>
<buildArgs>
--no-fallback
</buildArgs>
</configuration>
<executions>
<execution>
<goals>
<goal>native-image</goal>
</goals>
<phase>package</phase>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.example.demo.DemoApplication</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
打包运行
mvn package -Pnative
启动速度与内存对比
启动速度
Jar
nateive image
内存使用
Jar
nateive image
源码下载
注意:本文归作者所有,未经作者允许,不得转载