Java 教程

Java 控制语句

面向对象编程

Java 内置类

Java 文件处理

Java 错误和异常

Java 多线程

Java 同步

Java 网络

Java 集合

Java 接口

Java 数据结构

Java 集合算法

高级 Java

Java 杂项

Java API 和框架

Java 类参考

Java 有用资源

Java - 动态 CDS



什么是 CDS?

CDS 代表类数据共享。它在 JDK 5 中引入,通过加载核心类和共享 JVM 元数据的预处理存档来改进 JVM 的启动时间。当 JVM 初始化时,它加载一组核心类,例如 java.lang 包类。使用 CDS,Java 支持创建此类核心类的预处理存档,以便可以通过直接使用预处理存档来改进初始化的正常过程(扩展存档、验证类、生成字节码)。以下命令可用于 JDK 5 及更高版本以创建将在启动时由 JVM 使用的 CDS 存档。

$java -Xshare:dump -cp APITester.jar APITester

CDS 存档将位于 JAVA 安装目录中。

$JAVA_HOME/lib/server/classes.jsa
or
$JAVA_HOME/bin/server/classes.jsa

当 JVM 初始化并指示使用 CDS 时,此存档将用于加载核心类,而不是解压缩和验证类,从而缩短启动时间。

什么是动态 CDS?

CDS,类数据共享是 JVM 的一项重要功能,用于提升加载应用程序的启动时间。因为它允许在不同的 JVM 之间共享类元数据,从而减少了启动时间和内存占用。Java 10 通过提供 AppCDS(应用程序 CDS)增强了 CDS,使开发人员能够访问将应用程序类包含在共享存档中。Java 12 将 CDS 存档设置为默认值。

但是,创建 CDS 的过程很繁琐,因为开发人员必须经历应用程序的多次试验才能创建类列表作为第一步,然后将该类列表转储到存档中。然后,可以使用此存档在 JVM 之间共享元数据。

从 Java 13 开始,现在 Java 具有动态存档功能。现在,开发人员可以在应用程序退出时生成共享存档。因此,不再需要试运行。

创建动态 CDS?

以下步骤展示了如何在默认系统存档的基础上使用选项 -XX:ArchiveClassesAtExit 并传递存档名称来创建一个动态共享存档。

$java -XX:ArchiveClassesAtExit=sharedApp.jar -cp APITester.jar APITester

生成共享存档后,可以使用 -XX:SharedArchiveFile 选项运行应用程序。

$java -XX:SharedArchiveFile=sharedApp.jar -cp APITester.jar APITester

示例

考虑以下示例 -

APITester.java

public class APITester {
   public static void main(String[] args) {
      System.out.println("Welcome to TutorialsPoint.");
   }   
}

编译并运行程序

$javac APITester.java

$jar cf APITester.jar APITester.class

$java -XX:ArchiveClassesAtExit=sharedApp.jsa -cp APITester.jar APITester

$java -XX:SharedArchiveFile=sharedApp.jsa -cp APITester.jar APITester

输出

Welcome to TutorialsPoint.
广告