Windows下使用Graalvm将Springboot应用编译成exe大大提高启动和运行效率
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的特性,真正的适配云原生环境。
Windows下使用Graalvm将Springboot应用编译成exe大大提高启动和运行效率的更多相关文章
- Windows下使用Graalvm将Javafx应用编译成exe
1 背景 Graalvm是Oracle推出的一款新型虚拟机,其中一个吸引人的功能是:它可以将Java代码编译成各个平台的本地代码,这些平台包括:linux.macOS.windows.iOS.andr ...
- PyQt(Python+Qt)学习随笔:windows下使用pyinstaller将PyQt文件打包成exe可执行文件
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 在<windows下使用pyinstaller将多个目录的Pyt ...
- windows下使用pyinstaller把python文件打包成exe可执行文件
使用pyinstaller打包有个好处就是所有依赖都打包进去了,可以随意把文件移动到别的电脑上使用 安装 pip install pyinstaller 新建一个demo.py文件 #!/usr/bi ...
- Windows下将Python源代码.py文件封装成exe可执行文件方法
安装pyinstaller cmd中使用pip安装 pip install pyinstaller 同时会自动安装pywin32(pip真慢50M这里就走20KB),可以进行切换为国内源进行提速. 就 ...
- 用python写个简单的小程序,编译成exe跑在win10上
每天的工作其实很无聊,早知道应该去IT公司闯荡的.最近的工作内容是每逢一个整点,从早7点到晚11点,去查一次客流数据,整理到表格中,上交给素未蒙面的上线,由他呈交领导查阅. 人的精力毕竟是有限的,所以 ...
- Windows下为 Eclipse 配置 C/C++ 编译环境(转)
1.Eclipse及CDT的安装 CDT的全称是C/C++ DevelopmentTools,CDT使得Eclipse能够支持C/C++的开发.直接下载 eclipse CDT 集成版 下载地址:ht ...
- windows下使用mingw和msvc静态编译Qt5.15.xx
windows下使用mingw和msvc静态编译Qt5.15.xx 下载并安装相关依赖软件 Python version 2.7 https://www.python.org/downloads/ ( ...
- 把perl脚本编译成exe
来源:http://www.veryhuo.com/a/view/38338.html 今天想把 perl 脚本编译成 exe 以便脱离 perl 解释器独立运行.都可以生成PERL的PE文件,在PE ...
- 把java编译成exe和安装包
由于某些项目甲方迟迟不结算尾款,这就很烦,只能想一些办法 我们知道java,python之类的代码是没有隐私可言的,那么怎么办,总要发给甲方验收,这就要做一些操作来确保自己的利益. 通过在源代码里加上 ...
- windows下安装python的C扩展编译环境(解决“Unable to find vcvarsall.bat”)
个人文章除注明转载外,均为个人原创或者翻译. 个人文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商: 本文链接:http://www.cnblogs.com/f ...
随机推荐
- 八、docker compose容器编排
一. Docker-Compose 1.1. 什么是Docker Compose Compose 项目是 Docker 官方的开源项目,负责实现 Docker 容器集群的快速编排,开源代码在 http ...
- 使用rsync向服务器迁移大文件
场景 本人将12G本地单文件(12G大小h5文件数据集)向Linux服务器进行大文件上传时传输失败.最初使用 scp 命令或 rsync 直接对大文件进行传输,会出现网络断开或服务器端管道破裂情况,而 ...
- 实验6:开源控制器实———RYU
一.实验目的 1.能够独立部署RYU控制器: 2.能够理解RYU控制器实现软件定义的集线器原理: 3.能够理解RYU控制器实现软件定义的交换机原理. 二.实验环境 Ubuntu 20.04 Deskt ...
- 我的Vue之旅 09 数据数据库表的存储与获取实现 Mysql + Golang
第四期 · 将部分数据存储至Mysql,使用axios通过golang搭建的http服务器获取数据. 新建数据库 DROP DATABASE VUE; create database if not e ...
- ISCTF2022WP
ISCTF2022改名叫套CTF吧(bushi),博主菜鸡一个,套题太多,挑一些题写下wp,勿喷. MISC 可爱的emoji 下载下来是个加密压缩包,根据hint掩码爆破密码 得到密码:KEYI ...
- OS-HACKNOS-2.1靶机之解析
靶机名称 HACKNOS: OS-HACKNOS 靶机下载地址 https://download.vulnhub.com/hacknos/Os-hackNos-1.ova 实验环境 : kali 2. ...
- .NET 7 AOT 的使用以及 .NET 与 Go 互相调用
目录 背景 C# 部分 环境要求 创建一个控制台项目 体验 AOT 编译 C# 调用库函数 减少体积 C# 导出函数 C# 调用 C# 生成的 AOT Golang 部分 安装 GCC Golang ...
- Go语言核心36讲29
在上篇文章中,我们主要说的是互斥锁,今天我和你来聊一聊条件变量(conditional variable). 前导内容:条件变量与互斥锁 我们常常会把条件变量这个同步工具拿来与互斥锁一起讨论.实际上, ...
- Go语言核心36讲01
你好,我是郝林,今天我分享的内容是:0基础的你,如何开始入门学习Go语言. 1. 你需要遵循怎样的学习路径来学习Go语言? 我们发现,订阅本专栏的同学们都在非常积极的学习和讨论,这让我们非常欣慰,并且 ...
- Java:自定义排序与sort()函数
自定义排序与Arrays.sort() 本篇题目来源:2022/11/13 Leetcode每日一题:https://leetcode.cn/problems/custom-sort-string 给 ...