1. GraalVM 是什么

GraalVM是 Oracle 开源的一款通用虚拟机产品,官方称之为 Universal GraalVM,是新一代的通用多语言高性能虚拟机。它可以运行多种编程语言,如Java、JavaScript、Python等,并提供了即时编译(JIT)和AOT编译(AOT)的支持。GraalVM还支持在不同语言之间互相调用,以及嵌入到其他应用程序中使用。这使得GraalVM成为一个非常强大和灵活的工具,可以满足不同应用场景的需求。

在这里插入图片描述

2. GraalVM有哪些特点?

2.1. 高性能

GraalVM的即时编译器采用了新型的JIT技术,能够在运行时对代码进行优化,从而提高应用程序的性能。同时,GraalVM还支持AOT编译,能够将代码预先编译成本地机器代码,进一步提高应用程序的运行速度。

从下图可以看到,使用Native Image编译得Java微服务应用相比较于原来的HotSpot模式,启动时间大大地缩短了。而这正式云原生时代serverless所需要的快速启动的能力。
在这里插入图片描述

2.2. 多语言支持

GraalVM支持多种编程语言,如Java、JavaScript、Python等,甚至还支持R、Ruby、C等语言。这意味着开发者可以使用他们最喜欢的语言来开发应用程序,同时还可以将不同语言的代码集成在一起。

2.3. 互操作性

GraalVM允许不同语言之间互相调用,甚至可以将代码嵌入到其他应用程序中。这使得开发者可以选择最适合他们需求的编程语言,并且不需要为了使用不同的语言而进行大量的代码转换。

2.4. 安全性

GraalVM的安全性是由于其特有的“沙箱”机制。这个机制允许开发者在GraalVM上运行不受信任的代码,而不会影响到系统的其他部分。这种机制可以防止恶意代码的传播,从而保证系统的安全性。

3. GraalVM的应用效果

GraalVM的应用效果非常显著,尤其在大规模、复杂的应用程序中。

3.1. 提高性能

GraalVM的即时编译器和AOT编译器可以显著提高应用程序的性能。据测试,GraalVM的性能可以比传统的JVM高出20%-100%。

3.2. 简化开发

GraalVM的多语言支持和互操作性可以大大简化开发工作。开发者可以使用他们最熟悉的语言来开发应用程序,并且不需要进行大量的代码转换和集成工作。

3.3. 降低成本

GraalVM的性能提升和简化开发的特性,可以帮助企业在开发过程中减少人力资源和时间成本,同时提高开发效率。

3.4. 节省资源

GraalVM采用了高效的内存管理技术,可以在运行时动态调整内存大小。这意味着应用程序可以更好地利用系统资源,从而提高整体性能。

从下图可以看到使用Native Image构建的Java微服务应用在内存消耗上更少,能够更加有效利用系统资源。
在这里插入图片描述

3.5. 支持云环境

GraalVM的云支持使得它可以在云环境中运行,这意味着开发者可以将应用程序轻松迁移到云上,并且能够利用云环境的弹性扩展和负载均衡等特性。

4. 使用GraalVM编译springboot应用程序

4.1. 下载并安装GraalVM

4.1.1. 官网地址 或者 Github

选择一个版本下载并上传到 Linux,我这里下载的是Java 17的版本,并解压

在这里插入图片描述

4.1.2. 配置JAVA_HOME

由于我的是新的虚拟机,没有出现多个jdk的问题,出现多个jdk需要选择对应的jdk版本

export PATH=/usr/graalvm/bin:$PATH
export JAVA_HOME=/usr/graalvm
export GRAALVM_HOME=/usr/graalvm
source /etc/profile #刷新配置文件

查看是否配置成功java -version
在这里插入图片描述

4.2. 下载安装 GraalVM Native-image工具

同样是在Github上找到对应的版本下载即可

在这里插入图片描述

gu install native-image-installable-svm-java11-darwin-amd64-20.0.1.jar 

5. 创建 SpringBoot 项目

这里选择很多,可以本地上传一个简单的项目,也可以在 Linux 上通过 Spring Boot CLI 进行安装

# 通过 sdk 安装 Spring Boot CLI
sdk install springboot 

#spring init -list 查看相关配置
spring init -list

# 通过maven build 添加web依赖 myapp项目名称 创建好后解压到 myapp目录 不然只有一个zip文件
spring init --build=maven --dependencies=web --artifact-id=myapp myapp 

在这里插入图片描述
在这里插入图片描述

5.1 使用 mvn 打包项目

这里需要用到maven,这里自己下载配置一个就可以

# 进入项目根目录 使用mvnw打包项目
./mvnw package
# 先使用 Java -jar 跑一遍项目确定没有我呢提
java -jar [jar目录]

mvn 打包项目
java -jar 启动项目
测试是否访问正常

5.2. 通过 native-image 把jar编译成二进制

这里忘记有没有安装官网提供的native-image,因为是后面才回来写的博客,有问题只需要在官网下载对应native-image版本进行安装即可

native-image -jar [jar包目录]

这里需要等待一会,具体时间不太确定,没有跑命令行进度
在这里插入图片描述

可以看见这里的jar的大小在19M左右,编译后的大小在12M左右

5.3. 运行编译后的文件并测试是否可正常访问

在这里插入图片描述
在这里插入图片描述

暂时结束~

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐