在Spring Boot项目中使用Leyden

Spring Boot 服务的 RAM 消耗减少多达 30% ,为研究Spring Boot而量身定制的 Alpaquita 容器。Buidpacks也可用!

重要提示:Project Leyden EA 版本基于实验代码,不适用于生产用途。此外,EA 版本中的某些功能可能会更改或删除,工作流程也可能会更改。

1.Leyden是什么?

Project Leyden 是一个 OpenJDK 项目,自 2022 年以来一直在筹备中。该项目旨在利用 CDS(类数据共享)和提前优化来选择性地将计算从运行时转移和约束到某个时间点 — 例如到更早的阶段。

最终目标是在封闭世界约束下创建完全静态的镜像。封闭世界约束可以实现更强大的启动优化,正如我们在 GraalVM Native Image 中看到的那样。但它与 Java 的动态性不太相符。因此,目前,Leyden 项目团队正在探索可以适用于更广泛应用程序的较弱约束。

Project Leyden 在开发阶段可以做什么?它在试运行期间观察应用程序行为,并根据观察结果执行某些计算。试运行后,它会创建一个 CDS 存档,其中包含类元数据、方法分析器和编译后的代码(例如试运行期间经常使用的方法)。因此,当您执行应用程序的生产运行时,它会使用 CDS 存档中的数据并启动得更快。

2.在SpringBoot中使用Leyden

2.1.实验准备

  • Spring Petclinic for Spring Boot 3.3
  • M1 MacBook Air

2.2.编译

mvn -Dmaven.test.skip=true clean package

2.3.打包

java -Djarmode=tools -jar target/spring-petclinic-3.3.0-SNAPSHOT.jar extract

当您使用 -Djarmode=tools 实用程序时,Spring 会使用各种布局将应用程序提取到目录中。在默认布局的情况下,该目录将包含:

  • 包含库的 lib 子目录
  • 包含应用程序类和引用 lib 文件夹中的库的清单的应用程序 JAR

3.试运行

java -XX:CacheDataStore=SpringPetclinic.cds -jar spring-petclinic-3.3.0-SNAPSHOT/spring-petclinic-3.3.0-SNAPSHOT.jar

将创建两个文件:

  • SpringPetclinic.cds 包含类元数据、堆对象和分析数据;
  • SpringPetclinic.cds.code 包含 AOT 编译方法(计划将来将此文件与 SpringPetclinic.cds 合并)

3.生产运行

java -XX:CacheDataStore=SpringPetclinic.cds -jar spring-petclinic-3.3.0-SNAPSHOT/spring-petclinic-3.3.0-SNAPSHOT.jar

通过生产模式运行,启动速度将会加快3倍左右。

4.使用Leyden前后的类共享数的变化

4.1.删除先前生成的共享类数据文件

rm -fv SpringPetclinic.cds*

4.2.重新启动且记录共享类创建日志信息

java -XX:CacheDataStore=SpringPetclinic.cds -Xlog:cds=debug:file=log/cds.log -Dspring.context.exit=onRefresh -jar spring-petclinic-3.3.0-SNAPSHOT/spring-petclinic-3.3.0-SNAPSHOT.jar

4.3.记录生产启动下已经加载类的数量

java -XX:CacheDataStore=SpringPetclinic.cds -Xlog:class+load=info:file=log/class-load.log -jar spring-petclinic-3.3.0-SNAPSHOT/spring-petclinic-3.3.0-SNAPSHOT.jar

4.4.已经加载类的总数

cat log/class-load.log | wc -l
18627

4.5.总共享类文件中加载类的总数

grep -o 'source: shared' -c log/class-load.log
17935

如您所见,93.4% 的类都进入了存档!但 Leyden 不仅仅是加载类。如上所述,存档还存储分析数据和编译的代码。

5.总结

Leyden使得SpringBoot启动和预热时间的初步成果是显而易见的,其他相关的技术如下:

  • CDS。这是一个可用于生产的功能,可让您根据设置将启动时间减少高达 54%。
  • GraalVM Native Image 支持生成几乎立即启动的本机映像,但可能需要代码重构。
  • CRaC 项目是一个 OpenJDK API,可让您将 Java 应用程序的启动时间缩短至几毫秒,并保留 JIT 的强大功能以实现动态性能优化。关于CRaC可以看我以往的博客Java应用-JIT启动预热解决方案及验证结果。

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

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

相关文章

2.3.2 主程序和外部IO交互 (文件映射方式)----C#调用范例

2.3.2 主程序和外部IO交互 (文件映射方式)----C#调用范例 效果显示 1 说明 1 .1 Test_IOServer是64bit 程序, BD_SharedIOServerd.dll 在 /Debug文件夹中 1 .2 Test_IOServer是32bit 程序, BD_SharedIOClientd.dll (32bit&#…

CV03_mAP计算以及COCO评价标准

COCO数据集回顾:CV02_超强数据集:MSCOCO数据集的简单介绍-CSDN博客 1.1 简介 在目标检测领域中,mAP(mean Average Precision,平均精度均值)是一个广泛使用的性能评估指标,用于衡量目标检测模型…

技术赋能政务服务:VR导视与AI客服在政务大厅的创新应用

在数字化转型的浪潮中,政务大厅作为服务民众的前沿阵地,其服务效率和质量直接影响着政府形象和民众满意度。然而,许多政务大厅仍面临着缺乏智能化导航系统的挑战,这不仅增加了群众的办事难度,也降低了服务效率。维小帮…

HTML5使用<pre>标签:保留原始排版方式

在网页创作中,一般是通过各种标记对文字进行排版的。但是在实际应用中,往往需要一些特殊的排版效果,这样使用标记控制起来会比较麻烦。解决的方法就是保留文本格式的排版效果,如空格、制表符等。 如果要保留原始的文本排版效果&a…

跟《经济学人》学英文:2024年07月06日这期:Finishing schools for the age of TikTok

Finishing schools for the age of TikTok Unsure how to be polite at work? Ask a digital etiquette guru 不确定如何在工作中保持礼貌?请教一位数字礼仪大师 “Finishing schools” 是指专门为年轻女性提供礼仪、社交技巧、文化修养等教育的学校,…

智慧文旅(景区)解决方案PPT(42页)

智慧文旅解决方案摘要 行业分析中国旅游业正经历消费大众化、需求品质化、发展全域化和产业现代化的发展趋势。《“十三五”旅游业发展规划》的发布,以及文化和旅游部的设立,标志着旅游业的信息化和智能化建设成为国家战略。2018年推出的旅游行业安全防范…

【Python实战因果推断】23_倾向分3

目录 Propensity Score Matching Inverse Propensity Weighting Propensity Score Matching 另一种控制倾向得分的常用方法是匹配估计法。这种方法搜索具有相似可观测特征的单位对,并比较接受干预与未接受干预的单位的结果。如果您有数据科学背景,您可…

linux下的网络编程

网络编程 1. 网络基础编程知识1.1网络字节序问题1.2 常用socket编程接口1.2.1 sockaddr1.2.2 ip地址转换函数1.2.4 socket()1.2.3 bind()1.2.4 listen()1.2.5 accept()1.2.6 connect() 1.3 以udp为基础的客户端连接服务器的demo1.4 以udp为基础的的服务器聊天室功能demo1.5 基于…

网安小贴士(6)TCP/IP分层

一、前言 1983年,美国国防部决定将TCP/IP作为所有计算机网络的标准协议,这标志着TCP/IP正式成为互联网的基础协议。随着个人计算机的普及和网络技术的发展,TCP/IP模型被广泛应用于各种网络环境中,包括局域网(LAN&#…

Linux-DNS

DNS域名解析服务 1.DNS介绍 DNS 是域名系统 (Domain Name System) 的缩写,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。…

优化路由,优化请求url

1、使用父子关系调整下使其更加整洁 2、比如说我修改了下url,那所有的页面都要更改 优化:把这个url抽出来,新建一个Api文件夹用于存放所有接口的url,在业务里只需要关注业务就可以 使用时 导包 发请求 如果想要更改路径,在这里…

ctfshow web sql注入 web242--web249

web242 into outfile 的使用 SELECT ... INTO OUTFILE file_name[CHARACTER SET charset_name][export_options]export_options:[{FIELDS | COLUMNS}[TERMINATED BY string]//分隔符[[OPTIONALLY] ENCLOSED BY char][ESCAPED BY char]][LINES[STARTING BY string][TERMINATED…

View->裁剪框View的绘制,手势处理

XML文件 <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android…

Linux系统的基础知识和常用命令

1、什么是Linux&#xff1f; 是一种免费使用和自由传播的类UNIX操作系统&#xff0c;其内核由林纳斯本纳第克特托瓦兹于1991年10月5日首次发布&#xff0c;它主要受到Minix和Unix思想的启发&#xff0c;是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行…

Flink实现准确和高效流处理的关键问题

时间相关: Watermark 水位线 水位线是插入到数据流中的一个标记,可以认为是一个特殊的数据。水位线主要的内容是一个时间戳,用来表示当前事件时间的进展。水位线是基于数据的时间戳生成的。水位线的时间戳必须单调递增,以确保任务的事件时间时钟一直向前推进,进展。水位线…

Git 运用小知识

1.Git添加未完善代码的解决方法 1.1 Git只是提交未推送 把未完善的代码提交到本地仓库 只需点击撤销提交&#xff0c;提交的未完善代码会被撤回 代码显示未提交状态 1.2 Git提交并推送 把未完善的代码提交并推送到远程仓库 点击【未完善提交并推送】的结点选择还原提交&#x…

【后端面试题】【中间件】【NoSQL】MongoDB查询优化2(优化排序、mongos优化)

优化排序 在MongoDB里面&#xff0c;如果能够利用索引来排序的话&#xff0c;直接按照索引顺序加载数据就可以了。如果不能利用索引来排序的话&#xff0c;就必须在加载了数据之后&#xff0c;再次进行排序&#xff0c;也就是进行内存排序。 可想而知&#xff0c;如果内存排序…

【Oracle】Oracle常用函数

目录 聚合函数数字函数1. ABS函数&#xff1a;返回一个数的绝对值。2. CEIL函数&#xff1a;返回大于等于给定数的最小整数。3. FLOOR函数&#xff1a;返回小于等于给定数的最大整数。4. ROUND函数&#xff1a;将一个数四舍五入到指定的小数位。5. MOD函数&#xff1a;返回两个…

Vue 数据大屏适配

1、准备俩个盒子 .dataScreen-content 盒子内容根据设计稿给的px单位进行正常的布局就行 2、盒子的CSS样式 .dataScreen-container {width: 100%;height: 100%;// 有背景图需要的样式background: url("./images/bg.png") no-repeat;background-repeat: no-repeat;b…

推荐算法学习笔记2.1:基于深度学习的推荐算法-基于共线矩阵的深度推荐算法-AutoRec模型

AutoRec模型 前置知识&#xff1a;推荐算法学习笔记1.1:传统推荐算法-协同过滤算法 AutoRec模型通过引入自编码器结构&#xff0c;将共线矩阵中的用户向量&#xff08;基于用户的U-AutoRec&#xff09;或物品向量&#xff08;基于物品的I-AutoRec&#xff09;嵌入到低维空间后还…