|
对于最新稳定版本,请使用Spring Framework 7.0.1! |
CDS
类数据共享(CDS)是JVM的一个功能,可以帮助减少Java应用的启动时间和内存占用。
要使用此功能,应为 应用。Spring 框架提供了一个钩点,方便创建 档案。一旦归档可用,用户应通过JVM标志选择使用。
创建CDS档案
应用程序退出时可以创建CDS归档。Spring
框架提供了一种作模式,使得进程在应用上下文已经焕然一新。在此模式下,所有非懒惰的初始化单例
已被实例化,且InitializingBean#afterPropertiesSet回访已经有
调用;但生命周期尚未开始,且ContextRefreshedEvent尚未
已发表。
要创建归档,必须指定两个额外的JVM标志:
-
-XX:ArchiveClassesAtExit=application.jsa: 在退出时创建CDS归档 -
-Dspring.context.exit=onRefresh:开始后立即退出你的Spring 应用如上所述
要创建CDS归档,你的JDK/JRE必须有一个基础映像。如果你把上面的旗帜加到 你的启动脚本,你可能会收到类似这样的警告:
-XX:ArchiveClassesAtExit is unsupported when base CDS archive is not loaded. Run with -Xlog:cds for more info.
基础CDS归档通常开箱即用,但如有需要,也可以通过发布以下文件创建 命令:
$ java -Xshare:dump
使用档案
一旦档案可用,添加-XX:SharedArchiveFile=application.jsa致你的初创公司
脚本以使用它,假设application.jsa工作目录中的文件。
为了检查CDS缓存是否有效,你可以使用(仅用于测试,不适用于生产环境)-Xshare:on哪
如果无法启用CDS,会打印错误信息并退出。
要了解缓存的效果,你可以通过添加添加来启用类加载日志
一个额外属性:-Xlog:class+load:file=cds.log.这会生成一个cds.log每个
尝试加载一个类及其源代码。从缓存加载的类应当具有
一个“共享对象文件”源,如下示例所示:
[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,或者你有大量类没有从缓存加载出来,请确保 创建和使用档案时满足以下条件:
-
必须使用相同的JVM。
-
类路径必须指定为JAR列表,避免使用目录和通配字符。
* -
必须保留JAR的时间戳。
-
使用归档时,类路径必须与创建归档时使用的路径相同,顺序相同。 可以在结尾指定额外的 JAR 或目录(但不会被缓存)。