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
相关推荐
明月_清风5 小时前
Muse 登顶 App Store 第一,SDK 直接开源:AI Agent 开始进入下一个阶段
人工智能·后端
leikooo5 小时前
用餐厅和盘子理解栈和堆
java·数据结构·链表·rust
Ivanqhz6 小时前
激活函数在 Transformer 中的作用及各种变体简述
java·linux·数据库·人工智能·深度学习
沙漠之主6 小时前
C++编程教学设计资料:从入门到实战的完整课程方案
java·前端·c++
FPGA小徐7 小时前
PA1 基础设施(2)深度解析:NEMU 中 ITRACE、MTRACE、FTRACE、IRINGBUF、ETRACE、DIFFTEST 全解析
java·服务器·网络
YOLO数据集集合7 小时前
EvoAgent:面向PR研发治理的自进化Multi-Agent Harness系统
java·开发语言·目标检测·agent·自进化
hsfxuebao7 小时前
Loop Engineering 保姆级教程 + 项目实战
人工智能·后端
知行EDI7 小时前
知行之桥 MaBang 端口使用指南——Create Order 订单创建篇
java·服务器·数据库
笑鸿的学习笔记7 小时前
C++笔记之大块顺序写
java·c++·笔记
打工仔折腾 AI8 小时前
从 Demo 到生产级 Agent:8 个关键设计机制与 Python 实现拆解
java·jvm·人工智能·后端·python·langchain·ai agent 实战