springboot 3.3版本 类数据共享(CDS)提升启动速度 使用方法+Docker打包代码

springboot 3.3 版本已经正式发布,新版本提供了类数据共享(CDS)功能,通过将类元数据缓存在 Archive(归档/存档) 文件中,使其可以快速预加载到新启动的 JVM 中,从而帮助缩短 JVM 的启动时间和内存占用。

闲话少说,直接体验。

使用springboot3.3创建项目(此处略)。

编译应用

我们先把应用打包成jar包:mvn clean package

此处假设打包出来的是service.jar

按照官方文档,我们需要将一体式jar包提取成可以使用CDS技术的格式,使用下面的命令:

bash 复制代码
java -Djarmode=tools -jar service.jar extract

执行后,目录就变成了 类似下面这样:

复制代码
service
    ├── service.jar
    ├── lib
    │   ├── ...
    │   ├── 应用的各种依赖包.jar
    │   ├── ...

这个结构启动方式略有变化,变成了执行 java -jar service/service.jar,这样就可以运行起来了。

生成CDS归档文件

根据官方说法,使用CDS和生成CDS的jdk版本,目录等最好一致,所以我们直接去后面要运行应用的容器中执行生成CDS存档的命令,这样就可以保证环境完全一致。

Dockerfile参考如下:

Dockerfile 复制代码
# 基础镜像自己选一个 我这里用了 zulujdk
FROM azul/zulu-openjdk:21.0.3
# 把刚才生成的应用的整个目录放进来
ADD service /opt/service

ENV TZ Asia/Shanghai
RUN ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime \
    && echo ${TZ} > /etc/timezone
# 重点1: 预生成存档,参考 https://docs.spring.io/spring-framework/reference/integration/cds.html
RUN cd /opt/ && java -jar -XX:ArchiveClassesAtExit=application.jsa -Dspring.context.exit=onRefresh service/service.jar
# 重点2: 运行时使用预生成的存档
ENTRYPOINT  ["java", "-jar", "-XX:SharedArchiveFile=application.jsa", "/opt/service/service.jar"]

经过上面的打包,运行时应用就会使用预先生成的类数据,不再需要重新加载,可以提升启动速度(实际效果自行体验哈)。

相关推荐
努力的小郑18 小时前
MySQL索引(三):字符串索引优化之前缀索引
后端·mysql·性能优化
IT_陈寒18 小时前
🔥3分钟掌握JavaScript性能优化:从V8引擎原理到5个实战提速技巧
前端·人工智能·后端
程序员清风19 小时前
贝壳一面:年轻代回收频率太高,如何定位?
java·后端·面试
考虑考虑19 小时前
Java实现字节转bcd编码
java·后端·java ee
AAA修煤气灶刘哥19 小时前
ES 聚合爽到飞起!从分桶到 Java 实操,再也不用翻烂文档
后端·elasticsearch·面试
爱读源码的大都督20 小时前
Java已死?别慌,看我如何用Java手写一个Qwen Code Agent,拯救Java
java·人工智能·后端
勇往直前plus20 小时前
Sentinel微服务保护
java·spring boot·微服务·sentinel
星辰大海的精灵20 小时前
SpringBoot与Quartz整合,实现订单自动取消功能
java·后端·算法
天天摸鱼的java工程师20 小时前
RestTemplate 如何优化连接池?—— 八年 Java 开发的踩坑与优化指南
java·后端
一乐小哥20 小时前
一口气同步10年豆瓣记录———豆瓣书影音同步 Notion分享 🚀
后端·python