CDS的
类数据共享 (CDS) 是一项 JVM 功能,可以帮助减少 Java 应用程序的启动时间和内存占用。
要使用此功能,应为 应用。Spring 框架提供了一个钩点来简化 档案。一旦存档可用,用户应该通过 JVM 标志选择使用它。
创建 CDS 存档
当应用程序退出时,可以创建应用程序的 CDS 归档。Spring
框架提供了一种作模式,一旦ApplicationContext
已经刷新了。在此模式下,所有非延迟初始化的单例
已实例化,并且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 或目录(但不会缓存)。