在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.mzph.cn/news/867433.shtml

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

相关文章

开源数据科学平台Anaconda简介

开源数据科学平台Anaconda简介 零、时光宝盒 最近,某金融行业女性选择以跳楼的形式结束自己的生命,这件不幸的事情成了热门话题,各种猜测的都有,有些人评论的话真的很过分。我想起前段时间看到的,有个女学生跳江&#…

【论文解读】AGENTLESS:揭开基于LLM的软件工程代理的神秘面纱,重塑软件工程自动化新基线

📜 文献卡 英文题目: Agentless: Demystifying LLM-based Software Engineering Agents;作者: Chunqiu Steven Xia; Yinlin Deng; Soren Dunn; Lingming ZhangDOI: 10.48550/arXiv.2407.01489摘要翻译: 大型语言模型(LLM)的最新进展显著推进…

进程的控制-ps和kill命令

ps 查看进程信息 部分参数: a : 显示现行终端机下的所有程序,包括其他用户的程序 u: 以用户为主的格式来显示程序状况 x: 显示所有程序,不以 终端机来区分 kill 向指定的进程发送信号 kill 可将指定的信息送至程序。预设的信息为 SIG…

OpenAI突然停止中国API使用,出海SaaS产品如何化挑战为机遇?

2023年是AI爆发的年代,人工智能带来的信息裂变刷新了整个SaaS行业。在这个AI引领的时代,我们不应该单纯依赖工具本身,而是要理解如何将这些AI功能与行业相结合。 然而,上周OpenAI宣布禁止对中国提供API服务,有一些用户…

常用 各国语言简写

zh-CN 华 -中国 zh-TW 华 -台湾 zh-CHS 华 (单一化) zh-SG 华 -新加坡 zh-CHT 华 (传统的) zh-HK 华 - 香港的 SAR zh-MO 华 - 澳门的 SAR en 英国 en-US 英国 - 美国 en-AU 英国 -澳洲 en-BZ 英国 -伯利兹 en-CA 英…

六、数据可视化—flask框架入门(爬虫及数据可视化)

六、数据可视化—flask框架入门(爬虫及数据可视化) 1,数据可视化简介2,flask(1)创建flask项目(2)开启debug模式(3)通过访问路径传递参数(4&#x…

图的应用之最短路径

引入 应用 算法思想 Dijistra算法 用于解决单个顶点间的最短路径问题 将顶点看成两部分: 最短路径顶点集合A与尚未确定最短路径顶点集合B。 先将顶点按最短路径由小到大依次加入到A中,选择由源点到A中最短的顶点,并记录距离与顶点&#xf…

uni-app-H5页面调用设备摄像头扫描二维码

应用场景:APK里面webView,访问用uniapp写的H5页面,需要调用设备摄像头扫描二维码 首先下载导入扫描插件:H5调用摄像头识别二维码(原生H5调用,不需要任何sdk,本地扫描识别,不需要后端…

身体(body)的觉醒:如果你贪婪,给你整个宇宙都不够

佛,是一个梵文的汉语音译词,指觉醒者。 何谓觉醒?什么的觉醒?其实很简单,就是身体的觉醒。 佛的另一个名字,叫菩提,佛就是菩提,菩提老祖,就是佛祖。 一、body&#xff…

Webpack: 构建优化

概述 前面章节我们已经详细探讨 Webpack 中如何借助若干工具分析构建性能,以及如何使用缓存与多进程能力提升构建性能的基本方法与实现原理,这两种方法都能通过简单的配置,极大提升大型项目的编译效率。 除此之外,还可以通过一些…

Lambda架构

1.Lambda架构对大数据处理系统的理解 Lambda架构由Storm的作者Nathan Marz提出,其设计目的在于提供一个能满足大数据系统关键特性的架构,包括高容错、低延迟、可扩展等。其整合离线计算与实时计算,融合不可变性、读写分离和复杂性隔离等原则&…

3.js - 裁剪平面(clipIntersection:交集、并集)

看图 代码 // ts-nocheck// 引入three.js import * as THREE from three// 导入轨道控制器 import { OrbitControls } from three/examples/jsm/controls/OrbitControls// 导入lil.gui import { GUI } from three/examples/jsm/libs/lil-gui.module.min.js// 导入tween import …

深度解析Ubuntu版本升级:LTS版本升级指南

深度解析Ubuntu版本升级:Ubuntu版本生命周期及LTS版本升级指南 Ubuntu是全球最受欢迎的Linux发行版之一,其版本升级与维护策略直接影响了无数用户的开发和生产环境。Canonical公司为Ubuntu制定了明确的生命周期和发布节奏,使得社区、企业和开…

Spring AOP源码篇三之 xml配置

简单代码示例, 了解Spring AOP基于xml的基本用法 xml配置&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-insta…

django之url路径

方式一&#xff1a;path 语法&#xff1a;<<转换器类型:自定义>> 作用&#xff1a;若转换器类型匹配到对应类型的数据&#xff0c;则将数据按照关键字传参的方式传递给视图函数 类型&#xff1a; str: 匹配除了”/“之外的非空字符串。 /test/zvxint: 匹配0或任何…

golang线程池ants-实现架构

1、总体架构 ants协程池&#xff0c;在使用上有多种方式(使用方式参考这篇文章&#xff1a;golang线程池ants-四种使用方法)&#xff0c;但是在实现的核心就一个&#xff0c;如下架构图&#xff1a; 总的来说&#xff0c;就是三个数据结构&#xff1a; Pool、WorkerStack、goW…

Laravel任务调度:自动化运维的魔法师

标题&#xff1a;Laravel任务调度&#xff1a;自动化运维的魔法师 在现代Web应用开发中&#xff0c;自动化任务调度是一项不可或缺的功能。Laravel框架提供了一个强大的任务调度系统&#xff0c;允许开发者安排定时任务&#xff0c;如定期发送邮件、备份数据库或执行定时脚本。…

面试经典 150 题

文章目录 6、轮转数组 6、轮转数组 1、描述 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6…

【前端实现】在父组件中调用公共子组件:注意事项逻辑示例 + 将后端数组数据格式转换为前端对象数组形式 + 增加和删除行

【前端】在父组件中调用公共子组件的实现方法 写在最前面一、调用公共子组件子组件CommonRow.vue父组件ParentComponent.vue 二、实现功能1. 将后端数组数据格式转换为前端对象数组形式2. 增加和删除row 三、小结 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2…

全景图三维3D模型VR全景上传展示H5开发

全景图三维3D模型VR全景上传展示H5开发 3D互动体验平台的核心功能概览 兼容广泛格式&#xff1a;支持OBJ、FBX、GLTF等主流及前沿3D模型格式的无缝上传与展示&#xff0c;确保创意无界。 动态交互探索&#xff1a;用户可自由旋转、缩放、平移模型&#xff0c;深度挖掘每一处…