此版本仍在开发中,尚未被视为稳定版。如需最新稳定版本,请使用 Spring Framework 7.0.6spring-doc.cadn.net.cn

CDS

类数据共享(Class Data Sharing,CDS)是一项JVM 特性, 有助于减少 Java 应用程序的启动时间和内存占用。spring-doc.cadn.net.cn

要使用此功能,应为应用程序的特定类路径创建一个 CDS 归档文件。Spring 框架提供了一个钩子点,以简化该归档文件的创建。一旦归档文件准备就绪,用户应通过 JVM 参数选择启用它。spring-doc.cadn.net.cn

创建 CDS 归档

应用程序退出时可以创建其 CDS(类数据共享)归档文件。Spring 框架提供了一种运行模式,在该模式下,一旦 ApplicationContext 刷新完成,进程便会自动退出。在此模式中,所有非延迟初始化的单例 Bean 都已被实例化,并且已调用 InitializingBean#afterPropertiesSet 回调方法;但此时生命周期尚未启动,ContextRefreshedEvent 事件也尚未发布。spring-doc.cadn.net.cn

要创建该归档文件,必须指定两个额外的 JVM 标志:spring-doc.cadn.net.cn

  • -XX:ArchiveClassesAtExit=application.jsa:在退出时创建 CDS 存档spring-doc.cadn.net.cn

  • -Dspring.context.exit=onRefresh:启动您的 Spring 应用程序,然后立即退出,如上所述。spring-doc.cadn.net.cn

要创建 CDS 存档,您的 JDK/JRE 必须包含一个基础镜像。如果您将上述标志添加到启动脚本中,可能会收到类似如下的警告:spring-doc.cadn.net.cn

-XX:ArchiveClassesAtExit is unsupported when base CDS archive is not loaded. Run with -Xlog:cds for more info.

基础 CDS 归档文件通常开箱即用,但如有需要,也可以通过执行以下命令来创建:spring-doc.cadn.net.cn

$ java -Xshare:dump

使用归档

一旦归档文件可用,请在启动脚本中添加 -XX:SharedArchiveFile=application.jsa 以使用它,前提是工作目录中存在一个 application.jsa 文件。spring-doc.cadn.net.cn

要检查 CDS 缓存是否生效,可以使用(仅用于测试目的,不可在生产环境中使用)-Xshare:on,如果无法启用 CDS,该选项会打印一条错误信息并退出。spring-doc.cadn.net.cn

要了解缓存的有效性,可以通过添加一个额外的参数来启用类加载日志:-Xlog:class+load:file=cds.log。这将生成一个 cds.log 文件,其中记录了每次尝试加载类及其来源的信息。从缓存中加载的类应显示其来源为“shared objects file”(共享对象文件),如下例所示:spring-doc.cadn.net.cn

[0.064s][info][class,load] org.springframework.core.env.EnvironmentCapable source: shared objects file (top)
[0.064s][info][class,load] org.springframework.beans.factory.BeanFactory source: shared objects file (top)
[0.064s][info][class,load] org.springframework.beans.factory.ListableBeanFactory source: shared objects file (top)
[0.064s][info][class,load] org.springframework.beans.factory.HierarchicalBeanFactory source: shared objects file (top)
[0.065s][info][class,load] org.springframework.context.MessageSource source: shared objects file (top)

如果无法启用 CDS,或者你有大量类未从缓存中加载,请确保在创建和使用归档文件时满足以下条件:spring-doc.cadn.net.cn