Windows下使用Graalvm将Springboot应用编译成exe大大提高启动和运行效率(推荐)

作者:Antake 时间:2023-09-27 02:05:02 

GraalVM安装

GraalVM安装

安装

请前往GraalVM官网 下载 GraalVM Community 22.3,注意当前支持的Springboot的GraalVM版本必须是22.3
笔者这里下载的Java版本为17,如下图

Windows下使用Graalvm将Springboot应用编译成exe大大提高启动和运行效率(推荐)

安装GraalVM的方法与安装JAVA方法大致相同,GraalVM中包括了JDK(无需再次安装JDK),同时还需要安装native-image工具(后续下载)

配置环境变量

Windows下使用Graalvm将Springboot应用编译成exe大大提高启动和运行效率(推荐)

Windows下使用Graalvm将Springboot应用编译成exe大大提高启动和运行效率(推荐)

Windows下使用Graalvm将Springboot应用编译成exe大大提高启动和运行效率(推荐)

使用命令查看是否安装graal vm成功

java -version

Windows下使用Graalvm将Springboot应用编译成exe大大提高启动和运行效率(推荐)

native-image工具安装

这里下载的文件(同GraalVM下载位置下方的release文件)为native-image-installable-svm-java17-windows-amd64-22.3.0.jar如下图所示

Windows下使用Graalvm将Springboot应用编译成exe大大提高启动和运行效率(推荐)

下载完成之后在文件目录运行以下命令进行安装

- gu install xxxx.jar(同下载的工具镜像,网络下载)
- gu install -L xxxx.jar(同下载的工具镜像,本地文件)

Windows下使用Graalvm将Springboot应用编译成exe大大提高启动和运行效率(推荐)

使用以下命令查看是否安装成功

gu list

Windows下使用Graalvm将Springboot应用编译成exe大大提高启动和运行效率(推荐)

native-image

Windows下使用Graalvm将Springboot应用编译成exe大大提高启动和运行效率(推荐)

Visual Studio安装

编译native image必须依赖VC++的编译环境,这里必须使用微软官方的vc++编译工具Visual Studio,笔者这里使用的最新版本2022Visual Studi官网

To use Native Image on Windows, install Visual Studio and Microsoft Visual C++ (MSVC). There are two installation options: * Install the Visual Studio Build Tools with the Windows 10 SDK * Install Visual Studio with the Windows 10 SDK You can use Visual Studio 2017 version 15.9 or later. The `native-image` builder will only work when it is run from the **x64 Native Tools Command Prompt**. The command for initiating an x64 Native Tools command prompt varies according to whether you only have the Visual Studio Build Tools installed or if you have the full Visual Studio 2019 installed.

从上可知,Visual Studio 2017 version 15.9 or later均可
打开Visual Studio Installer,勾选如下图中三个组件

Windows下使用Graalvm将Springboot应用编译成exe大大提高启动和运行效率(推荐)

安装完成后,需要配置VC++的编译环境变量PATH,INCLUDE,LIB

LIB=C:\Program Files (x86)\Windows Kits\10\Lib\10.0.20348.0\um\x64;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.20348.0\ucrt\x64;D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.16.27023\lib\x64

INCLUDE=C:\Program Files (x86)\Windows Kits\10\Include\10.0.20348.0\ucrt;C:\Program Files (x86)\Windows Kits\10\Include\10.0.20348.0\um;C:\Program Files (x86)\Windows Kits\10\Include\10.0.20348.0\shared;D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.16.27023\include

PATH=D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.16.27023\bin\HostX64\x64

Windows下使用Graalvm将Springboot应用编译成exe大大提高启动和运行效率(推荐)

Windows下使用Graalvm将Springboot应用编译成exe大大提高启动和运行效率(推荐)

Windows下使用Graalvm将Springboot应用编译成exe大大提高启动和运行效率(推荐)

Springboot应用初体验

创建项目

Windows下使用Graalvm将Springboot应用编译成exe大大提高启动和运行效率(推荐)

Windows下使用Graalvm将Springboot应用编译成exe大大提高启动和运行效率(推荐)

运行项目

调试运行,正常启动

Windows下使用Graalvm将Springboot应用编译成exe大大提高启动和运行效率(推荐)

编译运行

编译

Windows下使用Graalvm将Springboot应用编译成exe大大提高启动和运行效率(推荐)

如果出错选择下面的,或者在编译插件中重新配置

Windows下使用Graalvm将Springboot应用编译成exe大大提高启动和运行效率(推荐)

如果编译都不行,用插件编译之前现在console执行以下命令

./mvnw -DskipTests=true -Pnative clean package

编译完成之后在target里面查看文件

Windows下使用Graalvm将Springboot应用编译成exe大大提高启动和运行效率(推荐)

运行

Windows下使用Graalvm将Springboot应用编译成exe大大提高启动和运行效率(推荐)

Windows下使用Graalvm将Springboot应用编译成exe大大提高启动和运行效率(推荐)

Windows下使用Graalvm将Springboot应用编译成exe大大提高启动和运行效率(推荐)

运行对比

jar(JVM)本地exe(native image)文件大小18M69M启动耗时1.183s0.098s内存占用106M46m
根据上述对比结果,尽管是一个最简单的springboot程序,但在启动耗时上native具有明显的优势,达到毫秒级,占用内存少了一半多。
由于是一项新技术,其推广和普及肯定必定需要一段时间(毕竟我们还在JDK1.8,哈哈),但在一些新的小型应用中,完全可以试试手,毕竟尽量native用不了,还有jvm可以兜底,我们并需要为此做额外的工作。
最近,希望java web能通过native的特性,真正的适配云原生环境。

来源:https://www.cnblogs.com/antake/p/17081592.html

标签:Windows,Graalvm,Springboot,编译
0
投稿

猜你喜欢

  • SpringBoot JSON全局日期格式转换器实现方式

    2021-10-03 10:07:28
  • C#实现两接口中同名方法实例分析

    2022-09-08 13:04:42
  • 详解SpringBoot修改启动端口server.port的四种方式

    2022-03-10 20:28:48
  • 基于Java汇总Spock框架Mock静态资源经验

    2023-11-25 04:42:29
  • 基于Hadoop实现Knn算法

    2023-11-27 04:01:20
  • 一步步教你如何创建第一个C#项目

    2021-08-15 04:41:56
  • java制作复制文件工具代码分享

    2022-08-05 05:30:22
  • Java中使用websocket实现在线聊天功能

    2023-01-03 22:07:20
  • C#将制定目录文件名转换成大写的方法

    2022-10-03 19:46:36
  • Android使用selector修改TextView中字体颜色和背景色的方法

    2021-06-19 17:28:18
  • SpringBoot使用Mybatis&Mybatis-plus文件映射配置方法

    2023-05-16 12:53:02
  • Java中关于泛型、包装类及ArrayList的详细教程

    2021-12-25 00:46:34
  • Android实现ListView分页加载数据

    2023-11-09 10:05:45
  • Java实战之实现一个好用的MybatisPlus代码生成器

    2023-06-18 02:16:10
  • Android集成腾讯X5实现文档浏览功能

    2023-10-03 23:44:06
  • Asp.Net中MVC缓存详解

    2023-06-08 13:44:45
  • 基于Java检查IPv6地址的合法性

    2022-08-05 12:17:17
  • pagehelper踩坑记之分页乱套问题解决

    2021-11-14 14:19:34
  • unity3D实现摄像机抖动特效

    2022-09-20 12:10:42
  • Java实现过滤掉map集合中key或value为空的值示例

    2021-05-25 10:26:17
  • asp之家 软件编程 m.aspxhome.com