Windows下使用Graalvm将Springboot应用编译成exe大大提高启动和运行效率(推荐)
作者:Antake 发布时间:2023-09-27 02:05:02
GraalVM安装
GraalVM安装
安装
请前往GraalVM官网 下载 GraalVM Community 22.3,注意当前支持的Springboot的GraalVM版本必须是22.3
笔者这里下载的Java版本为17,如下图
安装GraalVM的方法与安装JAVA方法大致相同,GraalVM中包括了JDK(无需再次安装JDK),同时还需要安装native-image工具(后续下载)
配置环境变量
使用命令查看是否安装graal vm成功
java -version
native-image工具安装
这里下载的文件(同GraalVM下载位置下方的release文件)为native-image-installable-svm-java17-windows-amd64-22.3.0.jar如下图所示
下载完成之后在文件目录运行以下命令进行安装
- gu install xxxx.jar(同下载的工具镜像,网络下载)
- gu install -L xxxx.jar(同下载的工具镜像,本地文件)
使用以下命令查看是否安装成功
gu list
native-image
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,勾选如下图中三个组件
安装完成后,需要配置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
Springboot应用初体验
创建项目
运行项目
调试运行,正常启动
编译运行
编译
如果出错选择下面的,或者在编译插件中重新配置
如果编译都不行,用插件编译之前现在console执行以下命令
./mvnw -DskipTests=true -Pnative clean package
编译完成之后在target里面查看文件
运行
运行对比
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


猜你喜欢
- 为什么要使用克隆? 想对一个对象进行处理,又想保留原有的数据进行接下来的操作,就需要克隆了,Java语言中克隆针对的是类的实例。如何实现对象
- 项目介绍医院管理系统,分为管理员、医生、病人三种角色;管理员主要功能包括:首页、系统管理:医生管理、患者管理、药品管理;预约管理;病史管理;
- 前言CountDownLatch和CyclicBarrier两个同为java并发编程的重要工具类,它们在诸多多线程并发或并行场景中得到了广泛
- 一、CORS概述跨源资源共享标准通过新增一系列 HTTP 头,让服务器能声明那些来源可以通过浏览器访问该服务器上的各类资源(包括CSS、图片
- 一、概述Groovy is a multi-faceted language for the Java platform.Apache Gr
- 本文实例通过前面学过的Paint、Canvas等2D绘画技术来实现在手机屏幕上绘制Android机器人。具体代码实现和效果:用来显示自定义的
- 推荐阅读:浅析Android手机卫士sim卡绑定深入浅析Android手机卫士保存密码时进行md5加密详解Android 手机卫士设置向导页
- 目录什么是树形结构数据效果用法源码总结什么是树形结构数据效果用法String jsonStr = "{\"name\&q
- 在 Windows 窗体应用程序中显示图片时要使用图片控件 ( PictureBox ),图片的设置方式与背景图片的设置方式相似。图片控件中
- intellij idea是一款非常优秀的软件开发工具,它拥有这强大的插件体系,可以帮助开发者完成很多重量级的功能。今天,我们来学习一下如何
- 写在前面作为程序员,多多少少都会遇到一些内存溢出的场景,如果你还没遇到,说明你工作的年限可能比较短,或者你根本就是个假程序员!哈哈,开个玩笑
- Spring实例Bean的方法Spring实例Bean的方法,在AbstractAutowireCapableBeanFactory中的pr
- 本文实例为大家分享了C#十五子游戏的具体代码,供大家参考,具体内容如下using System;using System.Collectio
- 数据库结构如下strategy中有外键member_id(关联member表)外键strategy_category(关联category表
- 背景两张表,分别是 :sys_tbl,和 sys_field,其中:sys_tbl 是系统所有表的信息,包含两个字段 :code(表名),n
- 前言短信验证码是通过发送验证码到手机的一种有效的验证码系统。主要用于验证用户手机的合法性及敏感操作的身份验证。现在市面上的短信服务平台有很多
- 今天在于硬件进行交互的过程中,要到了了需要两个数组进行合并,然后对数组进行反转和加密操作,以下是两个byte数组合并的方法。/** *
- 就把遇到的问题记录一下。写这篇文章时用的TinyMCE编辑器就很强大,但毕竟是第三方的,项目也考虑了这些,如果做些自定义的东西不太方便。 1
- 最近项目需要加入第三方分享和登录功能,之前其他项目的第三方分享和登录一直都使用ShareSDK实现的。为了统一使用友盟的全家桶,所以三方分享
- 最近在维护项目,app遇到安装在高版本的Android时,以往直接授权和new File(path)的形式不再支持,日志也是说Permiss