Java12新特性 -- 默認生成類數據共享(CDS)歸檔文件

默認生成類數據共享(CDS)歸檔文件

同一個物理機/虛擬機上啓動多個JVM時,若是每一個虛擬機都單獨裝載本身須要的全部類,啓動成本和內
存佔用是比較高的。因此Java團隊引入了類數據共享機制 (Class Data Sharing ,簡稱 CDS) 的概念,經過把一些核心類在每一個JVM間共享,每一個JVM只須要裝載本身的應用類便可。好處是:啓動時間減小了,另外核心類是共享的,因此JVM的內存佔用也減小了。java

歷史版本
  • JDK5引入了Class-Data Sharing能夠用於多個JVM共享class,提高啓動速度,最先只支持system classes及
    serial GC。算法

  • JDK9對其進行擴展以支持application classes及其餘GC算法。app

  • java10的新特性JEP 310: Application Class-Data Sharing擴展了JDK5引入的Class-Data Sharing,支持
    application的Class-Data Sharing並開源出來(之前是commercial feature)性能

    • CDS 只能做用於 BootClassLoader 加載的類,不能做用於 AppClassLoader 或者自定義的 ClassLoader加載的類。在 Java 10 中,則將 CDS 擴展爲 AppCDS,顧名思義,AppCDS 不止可以做用於
      BootClassLoader了,AppClassLoader 和自定義的 ClassLoader 也都可以起做用,大大加大了 CDS 的適
      用範圍。也就說開發自定義的類也能夠裝載給多個JVM共享了。
  • JDK11將-Xshare:off改成默認-Xshare:auto,以更加方便使用CDS特性。測試

迭代效果

Java 8 以來,在基本 CDS 功能上進行了許多加強、改進,啓用 CDS 後應用的啓動時間和內存佔用量顯着
減小。使用 Java 11 早期版本在 64 位 Linux 平臺上運行 HelloWorld 進行測試,測試結果顯示啓動時間縮短有 32%,同時在其餘 64 位平臺上,也有相似或更高的啓動性能提高。code

Java12新特性

JDK 12以前,想要利用CDS的用戶,即便僅使用JDK中提供的默認類列表,也必須java -Xshare:dump 做爲額外的步驟來運行。
Java 12 針對 64 位平臺下的 JDK 構建過程進行了加強改進,使其默認生成類數據共享(CDS)歸檔,以進一步達到改進應用程序的啓動時間的目的,同時也避免了須要手動運行:java -Xshare:dump 的須要,修改後的 JDK 將在${JAVA_HOME}/lib/server 目錄中生成一份名爲classes.jsa的默認archive文件(大概有18M)方便你們使用。
固然若是須要,也能夠添加其餘 GC 參數,來調整堆大小等,以得到更優的內存分佈狀況,同時用戶也能夠像以前同樣建立自定義的 CDS 存檔文件。server

相關文章
相關標籤/搜索