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
相关推荐
Bs_MoneyMagnet3 分钟前
基于springboot+vue的在线音乐管理系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring
小番茄程序猿4 分钟前
Agent 工程化实测:p95 从 836ms 降到 12ms,而真正的收获是发现瓶颈根本不在 Agent 这层
后端
YangYang9YangYan5 分钟前
2026 校招管理会计 JD 拆解,数据分析能力要求与工具清单
java·数据库·数据分析
仍然.12 分钟前
SpringCloud---Seata
spring boot·后端·spring cloud
写后端的胖头鱼17 分钟前
【高频面试题】分布式锁在项目中的应用
java·分布式·后端·分布式锁·高频面试题
CoderYanger20 分钟前
Java EE 进阶:2.3 JavaScript
java·开发语言·前端·javascript·css·职场和发展·java-ee
凤山老林24 分钟前
Spring Boot + OpenSearch 实战:搞定全文检索、向量召回与混合排序
spring boot·后端·全文检索·向量·opensearch·全文索引
Wang's Blog31 分钟前
Java框架快速入门: Spring Security+OAuth2之前后端分离多模块工程配置
java·spring·状态模式
梅梅绵绵冰36 分钟前
SpringCloud网关
java·spring·spring cloud
敲代码的嘎仔44 分钟前
互动问答系统实战:两级评论模型、ES 搜索集成、Caffeine 多级缓存全记录
java·开发语言·数据库·elasticsearch·缓存·mybatis·高并发