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.
廣告