SpringBoot3.0 Native构建

SpringBoot3.0支持了将java程序构建为可执行文件

其实将java构建为native应用,不是第一次提及了,我第一次听到这个想法的时候是Quarkus(exe4j不算哈,本质上还是启动了jvm进程),也大致看了一下官方文档,极少的内存占用和极快的启动速度。当时觉得好厉害。如果Spring和Quarkus让我选的话我肯定选spring,毕竟公司买服务器又不是花我钱。再说了买服务器是花了钱的闲着也是闲着起个jvm占点内存挺好。Spring相对来说我更熟悉,所以Spring应该是大多数人的选择。

一直以来java都存在 执行效率低,内存占用多,启动速度慢的问题。其实这些问题都也都是其又优势导致。一次编译到处运行,编译结果不依赖操作系统,由不同的jre来屏蔽操作系统的差异 。SpringBoot3.0 Native构建可以以极低的学习成本去解决这些问题。但相对应的代价就是编译结果是针对行的,我们在windows上构建的应用没办法在linux上运行(官网上暂时没有看到交叉编译相关的内容,都2202年了交叉编译是标配,应该是我没有找到)一次编译就只针对一个平台,无法做到一次编译到处运行。

项目前环境准备

SpringBoot3.0 Native构建_第1张图片

graalvm  Visual Studio

graalvm 我是用的版本是17 ,VS我使用的版本是2022

把JAVA_HOME指向我们刚解压的graalvm

SpringBoot3.0 Native构建_第2张图片

创建测试项目

使用idea创建SpringBoot 项目,演示情况我依赖就只选web

SpringBoot3.0 Native构建_第3张图片

 SpringBoot3.0 Native构建_第4张图片

 写一个测试接口

SpringBoot3.0 Native构建_第5张图片

访问正常,在idea下启动速度是1.625秒。

对比两种打包方式的启动速度和内存占用

 直接成jar包运行,启动时间是1.542秒

SpringBoot3.0 Native构建_第6张图片

 内存占用是109M

SpringBoot3.0 Native构建_第7张图片

native方式打包直接在idea里插件执行或者是dos里运行maven命令都会报错

Execution of D:\develop\graalvm-ce-java17\bin\native-image.cmd @target\tmp\native-image-2002058499160718203.args returned non-zero result

SpringBoot3.0 Native构建_第8张图片

这个问题一度困了我好长时间,而且这个错我还没有搜到正确的解决方案。直到我在仔细的去看官方文档

SpringBoot3.0 Native构建_第9张图片

因为我Visual Studio在我刚买回电脑的时候就已经装好了,所以Visual Studio安装步骤我就没有做,其实Visual Studio在官网指引中是需要安装到,但是到现在为止我们还是没有用到。在电脑搜索里输入 Native Tools Command Prompt

 SpringBoot3.0 Native构建_第10张图片

可以看到来自vs 2022 ,打开这个,转到项目所在目录,输入官网给出的命令 

mvn -Pnative native:compile

SpringBoot3.0 Native构建_第11张图片

然后就是的等待构建成功,target目录下又exe文件

SpringBoot3.0 Native构建_第12张图片

 SpringBoot3.0 Native构建_第13张图片

启动时间0.079秒,毫秒级启动!!! 

内存占用33M

SpringBoot3.0 Native构建_第14张图片

 内存占用: 109M -> 33M

启动时间:1.542s -> 0.079s

执行效率,理论上来讲少了jvm的翻译效率应该回高一些。但是性能测试情况毕竟复杂,没有测试所有不做结果评判。(jvm在代码执行上做了大量的优化,如JIT)

你可能感兴趣的:(java,springboot)