对于最新的稳定版本,请使用 Spring Framework 7.0.6!spring-doc.cadn.net.cn

CDS

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

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

创建CDS归档

可以在应用程序退出时为其创建CDS归档。Spring框架提供了一种操作模式,一旦ApplicationContext刷新完成,进程便可自动退出。在此模式下,所有非延迟初始化的单例对象都已被实例化,并且InitializingBean#afterPropertiesSet回调也已被调用;但生命周期尚未启动,ContextRefreshedEvent也还未发布。spring-doc.cadn.net.cn

要创建归档文件,必须指定另外两个JVM标志: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。从缓存中加载的类的来源应为“共享对象文件”,如下例所示: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