SpringBoot-五-AOT

AOT (Ahead-of-Time) 提前编译

在程序执行前,全部编译成机器码。

JIT (Just in Time)及时编译

程序边编译,边执行。

GraalVM(相当于平替JDK)

官网

https://www.graalvm.org/

GraalVM是一个高性能的JDK,旨在加速用Java和其他JVM语言编写的应用程序的执行,同时还提供JavaScript,Python和许多其他流行语言的运行时。

GraalVM提供了两种运行Java应用程序的方式:

·1.在HotSpotJVM上使用Graal即时(IT)编译器

·2.作为预先编译的本机可执行文件运行。

GraalVM的多语言能力使得在单个应用程序中混合多种编程语言成为可能,同时消除了外部语言调用的成本。

跨平台原生镜像原理图:

1.如果是在window平台进行编译,需要先安装VisualStudio中的c++环境。

2.安装GraalVM,进入官网下载

3.下载完成后,按照配置JDK的方法,修改环境变量替换JDK为GraalVM 的JDK。

4.然后在安装native-image依赖:

可以使用命令下载:

复制代码
gu install native-image

如果下载好了离线安装包:

使用命令:

复制代码
gu install --file native-image-Installable-svm-java17-windows-amd64-22.3.2.jar

5.在项目中先把项目打包成jar包

6.安装好native-image依赖 工具后,在windows开始菜单中找到VisualStudio 中的Native工具

6.打开x64 Native Tools Command Prompt for VS工具,使用打包命令进行打包

打包时候需要先CD到jar所在目录

复制代码
#从入口开始,编译整个jar
native-image -cp demo5-0.0.1-SNAPSHOT.jar com.haha.demo5.Demo5Application -o HelloDemo

命令解释:

片段 含义
native-image GraalVM 提供的可执行程序,AOT 提前编译器,把 Java 字节码编译成本地机器码
-cp demo5-0.0.1-SNAPSHOT.jar -cp = ‑classpath 类路径;告诉编译器去哪里找 class 字节码。这里指定我们自己项目的 jar 包
com.haha.demo5.Demo5Application 主类全限定名 ,包含main()入口方法;就是 SpringBoot 项目启动类
-o HelloDemo -o = output,指定输出原生程序的文件名,输出文件叫 HelloDemo

等价完整写法

复制代码
native-image --classpath demo5-0.0.1-SNAPSHOT.jar com.haha.demo5.Demo5Application --output HelloDemo

7.运行命令后,再目录下会生成一个HelloDemo.exe 可执行文件。

SpringBoot-Aot

1.创建springboot项目时候需要导入Native插件包

2.当我导入了Native插件依赖包时候,Maven对应项目中插件下会有native,下面还有build构建。

如果环境变量配置正确可以直接双击build构建本地镜像Aot.

3.如果是windows环境,需要先安装VisualStudio ,在配置VisualStudio有些特殊目录的环境变。

配置环境变量:

目录1:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include

目录2:C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\ucrt (通用 C 运行时,标准 C 语言库头文件)

目录3:C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\um (用户模式头文件,Win32 桌面 API,普通 EXE 程序调用的 Windows 系统接口)

目录4:C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\winrt (旧版 C++/CX 语法的 WinRT 头文件,UWP 老项目使用,现在微软推荐用 cppwinrt)

目录5:C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\shared (共享头文件,用户态、内核态都要用的公共定义)

目录6:D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\lib\x64

目录7:C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\ucrt\x64

目录8:C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\um\x64

4.修改IDEA中默认终端把powershell选为cmd

5.自动打包springboot,找到maven下插件,native下面的build

6.手动打包

首先找到maven-->插件---》springboot--->spring-boot:process-aot 双击预先处理(处理反射等类)。

或x64 Native Tools Command Prompt for VS工具中输入命令:

复制代码
mvn springboot:process-aot

6.1打开x64 Native Tools Command Prompt for VS工具,运行命令

复制代码
mvn -Pnative  native:build -f pom.xml
相关推荐
用户29975997127071 小时前
Service 层到底该 throw 异常还是 return 错误码?我在两个团队各推行过一种,最后被一个事务 Bug 说服了
后端
王大大的刀1 小时前
Spring AI 重试引起的 LLM 重复调用
java·人工智能
小月土星1 小时前
吞噬星空 RAG 项目 MySQL 实战:从硬编码登录到数据库鉴权(Day 1)
后端
Heo1 小时前
怎么保证缓存和数据库一致性?
前端·后端·面试
风流 少年1 小时前
hutool
java·服务器·开发语言
H_oRIZoN_2 小时前
Linux入门DAY27(文件IO(系统调用)详解|open/read/write/lseek)
java·linux·服务器
延凡科技2 小时前
从 “人管机器“ 到 “数据管人“:智慧矿山综合管控落地实践
java·后端·struts
ServBay2 小时前
2026 年值得关注的 8 款 AI 智能体工具
后端·aigc·ai编程
QX_hao2 小时前
【Go】--Cobra-cli的用法
开发语言·后端·golang