【第21章】spring-aot

文章目录

  • 前言
  • 一、GraalVM
    • 1. 介绍
    • 2. 特点
    • 3. 安装
    • 4. 环境变量
    • 5. 验证
    • 6. native-image
  • 二、安装C++编译环境(VS)
    • 1.安装
  • 三、编译及构建
    • 1. 测试类
    • 2. 编译
    • 3. 构建
    • 4. 执行
  • 总结


前言

spring-aot(Ahead-Of-Time)是Spring框架中提供的一个新特性,用于通过静态代码分析在构建时(Ahead-Of-Time)生成一些元数据,从而优化Spring应用程序的运行时性能。这个特性在Spring Native项目中得到了大量应用,用于支持Spring应用程序在GraalVM等原生环境中运行。

AOT编译的主要优势在于:

  1. 性能优化:通过在构建时生成元数据,可以减少应用程序在运行时的反射调用,从而提高应用程序的启动速度和执行性能。
  2. 原生映像支持:对于需要在非JVM环境中运行的应用程序(如使用GraalVM创建的原生映像),AOT编译是必需的,因为它可以确保在构建时解析所有必要的依赖项和配置。

Spring AOT支持的特性包括:

  • Bean定义:生成关于Spring容器中bean定义的元数据。
  • 条件注解处理:在构建时解析@ConditionalOn*等条件注解,从而避免在运行时进行这些检查。
  • 属性源解析:提前解析应用程序的配置属性。
  • 配置类解析:生成关于@Configuration类的元数据,以便在运行时快速加载。

要使用Spring AOT,你需要在项目的构建脚本中引入相关的依赖项,并使用Spring AOT提供的插件或工具来生成元数据。具体的配置和使用方法可能因你使用的构建工具(如Maven或Gradle)和Spring版本的不同而有所差异。

请注意,虽然Spring AOT可以带来性能提升和原生映像支持,但它也可能增加构建时的复杂性和时间。因此,在决定是否使用Spring AOT时,需要权衡这些因素。


一、GraalVM

1. 介绍

GraalVM是Oracle开源的一款通用虚拟机产品,官方称之为Universal GraalVM,是新一代的通用多语言高性能虚拟机。它可以运行多种编程语言,如Java、JavaScript、Python等,并提供了即时编译(JIT)和AOT编译(AOT)的支持。

2. 特点

GraalVM有三大特点:

  1. 高效运行Java:GraalVM 使用 Graal 编译器技术,这是一个 JIT 编译器,使得 Java 应用的执行速度更快。
  2. 多语言并行:GraalVM 支持在 Java 里面同时使用多种语言,如 Java、R 等,满足了不同应用场景的需求。
  3. 快速启动:GraalVM 直接把 Java 应用编译成机器码,执行起来体积更小、启动速度更快。

3. 安装

下载界面
在这里插入图片描述
选择好java版本和操作系统版本,将下载的压缩包解压。

4. 环境变量

变量名变量值
GRAALVM_HOMEG:\soft\graalvm-jdk-17.0.11+7.1
JAVA_HOMEG:\soft\graalvm-jdk-17.0.11+7.1
PathG:\soft\graalvm-jdk-17.0.11+7.1\bin;

5. 验证

java -version

在这里插入图片描述

6. native-image

gu list

在这里插入图片描述
如果不存在Native Image则执行

gu install native-image

二、安装C++编译环境(VS)

1.安装

下载界面
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、编译及构建

1. 测试类

/*** Create by zjg on 2024/4/21*/
public class SpringAot {public static void main(String[] args) {System.out.println("Hello SpringAot");}
}

2. 编译

在这里插入图片描述
在这里插入图片描述

G:
cd G:\workspace\spring6\spring-validator\src\main\java
javac SpringAot.java

3. 构建

native-image SpringAot

在这里插入图片描述
在这里插入图片描述

4. 执行

springaot

在这里插入图片描述


总结

回到顶部

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/3350.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面试二十二、跳表SkipLists

跳表全称为跳跃列表,它允许快速查询,插入和删除一个有序连续元素的数据链表。跳跃列表的平均查找和插入时间复杂度都是O(logn)。快速查询是通过维护一个多层次的链表,且每一层链表中的元素是前一层链表元素的子集(见右边的示意图&…

嵌入式UBoot如何跳转Kernel—uboot与linux交界分析

不知道你是否有这种感觉,就是学习了Uboot,学习了kernel,学习了安卓。但是有时候总感觉是各自孤立的,将三者连续不起来? • 不知道你是否在做启动方案的时候,在宏观上知道了整个启动链路流程,但是却在汪洋的代码中迷了路? 那么这篇文章必定对你有点用处。 如果没有,那请…

javabean技术四种方法

1.form表单 index页面 <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%><!-- jsp页面输入三角形三条边&#xff0c;输出周长和面积 --><!-- 实例化对象bean的名字可以随便取名&#xff0…

Nginx基本使用 反向代理与负载均衡

什么是Nginx Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器。 其特点是占有内存少&#xff0c;并发能力强&#xff0c;nginx的并发能力在同类型的网页服务器中表现较好&#xff0c;而且几乎可以做到7*24不间断运行&#xff0c;即使运行数个月也不需要重新启动。 …

MP2110A Anritsu 安立 采样示波器 眼图设备 简述

MP2110A是一款集成了误码率测试仪&#xff08;BERT&#xff09;和采样示波器的一体化测量仪器&#xff0c;主要用于光学模块的误码率&#xff08;BER&#xff09;测量、眼图分析等评估操作。它支持从10G到800G的光学模块制造过程中的检测分91522。MP2110A内置4通道采样示波器&a…

k8s部署jupyterlab,jupyterlab保存不了文件,如何解决?

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

ElasticSearch:查询操作合集

先看下我的数据&#xff1a; 1、查询所有文档&#xff1a; GET /cartest/_search或者 GET /cartest/_search {"query": {"match_all": {}} }2、匹配查询&#xff1a; match匹配类型查询&#xff0c;会把查询条件进行分词&#xff0c;然后进行查询&…

【树莓派】如何用电脑连接树莓派的远程桌面,灰屏解决

要使用VNC桌面连接到树莓派&#xff0c;你需要确保已经安装并启动了VNC服务器。以下是连接到树莓派的步骤&#xff1a; 在树莓派上启动VNC服务器&#xff1a; 打开终端或SSH连接到你的树莓派。输入以下命令以安装RealVNC的VNC服务器&#xff1a;sudo apt update sudo apt insta…

PLSQL数据库

目录 什么是PLSQL数据库 PL数据库的实现方法 PL数据库的基本语法 1.作用 2.语法 3.赋值输出 4.引用 5.异常处理 6.if 判断 7.loop循环 8.while循环 9.for循环 10.游标 11.参数游标 12.索引 13.分区表 什么是PLSQL数据库 PL/SQL&#xff08;Procedure Language/…

【C++航海王:追寻罗杰的编程之路】C++11(二)

目录 C11(上) 1 -> STL中的一些变化 2 -> 右值引用和移动语义 2.1 -> 左值引用和右值引用 2.2 -> 左值引用与右值引用比较 2.3 -> 右值引用使用场景与意义 2.4 -> 右值引用引用左值及其更深入的使用场景分析 2.5 -> 完美转发 C11(上) 1 -> STL…

为什么要建设数字化校园?

数字化校园的建设能够使用户能够随时随地的在有互联网的地方获取到校园的信息&#xff0c;而且由于这些信息都是有校园的管理部门发布的&#xff0c;所以这样就能保证信息的权威性。数字化校园平台还能让学校内部建立起相对独立的网络体系&#xff0c;能有效的消除“信息化孤岛…

Kubernetes TDengine 系列|安装 TDengine 的 Grafana 插件|Grafana监控TDengine数据

为了让Grafana 能够监控到TDengine 数据&#xff0c;快速集成搭建数据监测报警系统&#xff0c;所以直接安装TDengine 插件。 目录 一、安装 TDengine 的 Grafana 插件1、下载TDengine grafana插件2、解压到指定目录3、配置未签名插件 二、配置数据源&#xff0c;简单查询TDen…

【已解决】VMware虚拟机中出现无法将“iso文件”当做CD-ROM映像进行连接:找不到该文件的错误

报错 在VMware上运行虚拟机时报错&#xff1a;VMware虚拟机中出现无法将“iso文件”当做CD-ROM映像进行连接&#xff1a;找不到该文件的错误 原因分析 找不到这个iso文件了&#xff0c;检查文件位置 解决方案 找到iso文件&#xff0c;然后在VM中编辑虚拟机中这个文件的位置…

AI-数学-高中-45函数单调性与导数

原作者视频&#xff1a;【导数】【一数辞典】5函数单调性与导数&#xff08;重要&#xff09;_哔哩哔哩_bilibili 导数最重要作用&#xff1a;判断函数单调性。 示例&#xff1a;

新风口下的必应bing国内广告投放该怎么做?

必应Bing作为全球搜索引擎市场的重要参与者&#xff0c;正逐渐显现出其在国内市场的独特价值和潜力。随着互联网生态的多元化发展&#xff0c;必应Bing凭借其高质量用户群和精准投放能力&#xff0c;成为了企业寻求新增长点的新风口。 一、洞察先机&#xff0c;精准定位市场 …

运营版游戏陪玩平台源码/tt语音聊天/声优服务/陪玩系统源码开黑/约玩源码

简述 一个人的游戏叫孤独&#xff0c;一群人的游戏才是乐趣&#xff0c;随着电竞产业在国内的快速发展&#xff0c;游戏陪练行业也迅速成长&#xff0c;现在很多游戏玩家为了追求更高质量的游戏体验感&#xff0c;往往会在玩游戏的过程中找陪练&#xff0c;通过陪玩系统进行预…

常用的JDK9-JDK17的一些新增语法特性

目录 1.前言2.一些新增的特性2.1 yield关键字2.2 var关键字2.3 空指针异常2.4 密封类2.5 接口中的私有方法2.6 instanceof2.7 其他 1.前言 从springboot3.0开始&#xff0c;已经不⽀持JDK8了。参考资料 &#xff1a;Spring官方博客。从3.0开始&#xff0c;转变为JDK17。 官方…

Node+Vue3+mysql+ant design实现前后端分离——表格的添加、修改和删除

在上一篇文章中,我们分享了如何运用NodeJS、Vue、MySQL以及其他技术来实现后台管理系统中的表格查询功能。今天,我们将继续探讨另外三个重要的功能实现原则。这些原则在构建后台管理系统时至关重要,同时还有导入和导出这两种功能也必不可少。关于导入和导出功能,我们会在下…

CUDA的开发框架

CUDA的开发框架主要提供了一系列工具和库&#xff0c;使得开发者可以充分利用NVIDIA GPU进行高效的并行计算。以下是CUDA开发框架的一些关键组成部分。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.CUDA核心库&#xff1a;这些是构…

C++设计模式:中介者模式(十五)

1、定义与动机 定义&#xff1a;用一个中介对象来封装&#xff08;封装变化&#xff09;一系列的对象交互。中介者使各个对象不需要显示的相互引用&#xff08;编译时依赖 -> 运行时依赖&#xff09;&#xff0c;从而使其耦合松散&#xff08;管理变化&#xff09;&#xff…