在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

畢昇JDK 8 Dynamic CDS特性介紹

openEuler ? 來源:畢昇編譯 ? 作者:守兵、張一鵬 ? 2022-12-05 11:52 ? 次閱讀

1 背景

JDK 5 中引入的 Class-Data Sharing (CDS) 技術(shù)允許將一組類預處理為共享存檔文件,然后可以在運行時進行內(nèi)存映射以減少啟動時間。當多個 JVM 共享同一個歸檔文件時,它還可以減少內(nèi)存占用。

在 OpenJDK 社區(qū),CDS 技術(shù)發(fā)展有兩個演進方向:

擴大archive的類的范圍:CDS -> AppCDS -> Dynamic CDS。

擴大archive的數(shù)據(jù)種類:metadata(CDS、AppCDS、Dynamic AppCDS) -> 基本類對象 -> strings -> module -> Support for pre-generated java.lang.invoke classes in CDS archive。

Dynamic CDS特性(JEP 350: Dynamic CDS Archives[1])主要功能:

繼續(xù)增加類共享的范圍,提升共享類技術(shù)的收益

簡化使用 AppCDS 時 dump classlist 的操作,直接在程序退出時 dump 內(nèi)存中的類到 JSA 文件。

畢昇JDK 8 中實現(xiàn)的 Dynamic CDS 特性相比之前的 AppCDS ,增加了 Custom ClassLoader 的支持,擴展了共享類的支持范圍;且該JDK版本帶有基本類的 base JSA 文件,可以消除 dump classlist 的步驟,提高該特性的易用性。經(jīng)測試,在使用此特性的情況下 SpringBoot 啟動時間具有顯著提升。

注:JEP 350 中 Dynamic CDS 增加支持的類(lambda、匿名類),畢昇JDK 8 暫時沒有實現(xiàn)。

2 特性介紹

Java 應(yīng)用程序使用base JSA運行,在程序執(zhí)行結(jié)束時對類進行動態(tài)歸檔生成top JSA,top JSA將包含base JSA以外所有可以共享的類(包含Custom ClassLoader加載的類),共享類范圍的擴大提供了更短的啟動時間,而且Dynamic CDS對于額外共享的類采用重定位(relocate)到一個更加緊湊的內(nèi)存空間以減少空間的浪費。

base JSA:使用CDS/AppCDS生成的類共享文件,當不指定其路徑時,默認為:$JAVA_HOME/jre/lib//server/classes.jsa。
top JSA:使用Dynamic CDS生成的類共享文件。

a5f1887c-723e-11ed-8abf-dac502259ad0.png

注:類數(shù)據(jù)區(qū)分為讀寫、只讀,分別放置在RW、RO區(qū)。

此特性可以使用default JSA(JDK包中自帶的基本類的JSA文件)作為base JSA,因此可以簡化CDS特性使用步驟,生成top JSA后,運行程序時則同時將base JSA、top JSA映射到內(nèi)存中以加速啟動和節(jié)省內(nèi)存。

a6174b98-723e-11ed-8abf-dac502259ad0.png

此特性為保證Customer ClassLoader加載類的正確性,與AppClassLoader、ExtClassLoader在FindLoadedClass時直接由classLoader來查找共享類不同,其在DefineClass中的基本校驗完畢后查詢共享類。

3 使用說明

3.1 相關(guān)參數(shù)說明

分類 選項 含義
運行時選項 -Xshare:on 該參數(shù)繼承 CDS,使用共享文件
-XX:+UnlockExperimentalVMOptions 開啟實驗特性
-XX:SharedArchiveFile 用于用戶首次啟動時指定 base JSA 文件,其是生成 top JSA 的基礎(chǔ)
-XX:ArchiveClassesAtExit 用戶指定進程退出時生成 top JSA 文件路徑。文件名支持按照進程號 %p 輸出,可避免多JVM進程復寫一份 top JSA,導致 top JSA 不可用
日志開關(guān) -XX:InfoDynamicCDS 打開級別為 info 的日志,可以通過 -XX:DynamicCDSLog=PATH 設(shè)置輸出路徑,默認為標準輸出流
-XX:DebugDynamicCDS 打開級別為 debug 的日志,其余同上
-XX:TraceDynamicCDS 打開級別為 trace 的日志,其余同上

3.2 使用步驟

分為兩個步驟:

將可共享類的元數(shù)據(jù)(MetaData)dump 進文件;

使用該文件執(zhí)行 Java 程序。

下面以 HelloWorld 程序為例簡單說明 Dynamic CDS 的用法。

預置條件:Java 程序 HelloWorld.class。

下面是每個步驟的命令行,相關(guān)參數(shù)說明請參見 JVM 參數(shù)說明。

步驟一:生成 top JSA(依賴 base JSA ),實驗特性開關(guān)需要使能

java-XX:+UnlockExperimentalVMOptions-Xshare:on-XX:ArchiveClassesAtExit=top.jsa-XX:+InfoDynamicCDSHelloWorld

如果因為某些參數(shù)改變,導致 JDK 包中帶的 default JSA 無法使用,請重新用 CDS/AppCDS 生成 base JSA。

非正常結(jié)束的進程,比如 kill -9 殺死進程,則無法生成 JSA,則需要通過 jcmd GC.dynamic_cds_dump 命令在進程結(jié)束之前生成。

可省略 -XX:SharedArchiveFile 參數(shù),此時默認使用 -XX:SharedArchiveFile=$JAVA_HOME/jre/lib//server/classes.jsa 文件。

因為生成 JSA 過程中會修改運行時數(shù)據(jù),無法保證運行時正確,因此 dump top JSA 結(jié)束后直接退出進程。

步驟二:使用 top JSA 運行 Java 程序

java-XX:+UnlockExperimentalVMOptions-Xshare:on-XX:ArchiveClassesAtExit=top.jsa-XX:+InfoDynamicCDSHelloWorld

top JSA 中記錄了 base JSA 的路徑,可以在參數(shù)中只指明 top JSA 。如果 base JSA 路徑在 top JSA 生成之后發(fā)生了改變,需要同時指明 base、top JSA 的路徑:

java-Xshare:on-XX:SharedArchiveFile=base.jsa:top.jsa-XX:+InfoDynamicCDSHelloWorld

3.3 使用限制

生成、使用JSA兩階段參數(shù)和環(huán)境PAGE_SIZE必須一致

restore階段使用參數(shù) -XX:ObjectAlignmentInBytes=32、16 時,運行時會報錯,信息如下:

ErroroccurredduringinitializationofVM
Unabletousesharedarchive.
Anerrorhasoccurredwhileprocessingthesharedarchivefile.
Thesharedarchivefile'sObjectAlignmentInBytesof8doesnotequalthecurrentObjectAlignmentInBytesof32.

錯誤原因:因為生成 base JSA 時,ObjectAlignmentInBytes 默認為8,讀取時不支持指定其他對齊參數(shù)。

解決方法:重新使用 CDS/AppCDS 生成 base JSA 使用,生成時參數(shù)加入使用時對應(yīng)的 -XX:ObjectAlignmentInBytes 的值即可。

當dump時的系統(tǒng)環(huán)境變量pagesize小于使用時的pagesize,運行時會報錯,信息如下:

Anerrorhasoccurredwhileprocessingthesharedarchivefile.
UnabletomapReadOnlysharedspaceatrequiredaddress.
ErroroccurredduringinitializationofVM
Unabletousesharedarchive.

錯誤原因:page_size 影響 JSA 文件中的數(shù)據(jù)對齊,系統(tǒng)無法為JSA文件恢復分配內(nèi)存。

解決方法:重新使用 CDS/AppCDS 在當前環(huán)境生成 JSA 使用即可。

不支持關(guān)閉壓縮指針

使用 CDS(restore)階段使用參數(shù) -XX:-UseCompressedOops 或 -XX:-UseCompressedClassPointers 時,運行時會報錯,信息如下:

ErroroccurredduringinitializationofVM
Unabletousesharedarchive.:UseCompressedOopsandUseCompressedClassPointersmustbeonforUseSharedSpaces.
Classdatasharingisinconsistentwithotherspecifiedoptions.

錯誤原因:目前 CDS 只支持壓縮指針場景。

解決方法:使用時應(yīng)當開啟壓縮指針開關(guān),后續(xù)會支持壓縮指針關(guān)閉場景。

最大堆地址值需小于32G(當使用默認參數(shù) -XX:ObjectAlignmentInBytes=8)

使用 CDS(restore)階段使用參數(shù)和 (值 )的組合,運行時會報錯,信息如下:

Anerrorhasoccurredwhileprocessingthesharedarchivefile.
Unabletoreservesharedspaceatrequiredaddress0x0000000800000000
ErroroccurredduringinitializationofVM
Unabletousesharedarchive.

錯誤原因:JSA 文件的映射地址的堆區(qū)間,不能被參數(shù)所指定的JVM 其他組件占用。

解決方法:將此組合值 改為小于 32 可正常運行。

Dynamic CDS 不支持的共享類

Java version1.5 以及之前的類不支持共享。

JVM anonymous class 不支持共享。

如果基類不支持共享,則該類也不支持共享。

Dynamic CDS 不支持 JFR

JFR組件啟動過程會通過 asm 動態(tài)創(chuàng)建匿名類(anonymous class),與 Dynamic CDS 沖突。

4 性能測試

SpringBoot場景測試結(jié)果:

a627be88-723e-11ed-8abf-dac502259ad0.png

測試說明:

經(jīng)測試,使能 Dynamic CDS 特性相比于默認參數(shù) java -jar spring-petclinic-2.5.0-SNAPSHOT.jar 啟動效率會提升14.3%。

5 特性演進

后續(xù)畢昇JDK8 CDS特性將支持壓縮指針關(guān)閉場景。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Dynamic
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    7647
  • JDK
    JDK
    +關(guān)注

    關(guān)注

    0

    文章

    83

    瀏覽量

    16832
  • cds
    cds
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

    14565

原文標題:畢昇JDK 8 Dynamic CDS 特性介紹

文章出處:【微信號:openEulercommunity,微信公眾號:openEuler】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    關(guān)于杯,求助

    大二電子新手 ,有意向參加明年4月的杯競賽,不知道該做些什么作品,我會的也不多,沒什么好想法,各位好心人誰來給點提議啊 我現(xiàn)在在學習單片機和一些常用軟件:multisim,altium ,什么的 請問還應(yīng)該學習什么必要的知識呢?》多謝了
    發(fā)表于 11-15 22:21

    關(guān)于杯參賽選題

    本人研一,現(xiàn)在想和同學一起參加杯,可是不知道選什么題目,有高人給點建議吧
    發(fā)表于 12-04 17:10

    JDK 15安裝步驟及新特性

    。  JDK 15 新特性說明  JDK 15 為用戶提供了14項主要的增強/更改,包括一個孵化器模塊,三個預覽功能,兩個不推薦使用的功能以及兩個刪除功能。  1. EdDSA 數(shù)字簽名算法  新加入
    發(fā)表于 12-23 17:36

    JDK 8 Dynamic CDS 特性介紹

    Dynamic CDS 增加支持的類(lambda、匿名類),JDK 8 暫時沒有實現(xiàn)
    發(fā)表于 12-23 16:19

    IBM Informix Dynamic Server入門指

    IBM Informix Dynamic Server入門指南的主要內(nèi)容:介紹第1章 介紹Dynamic Server與Cllent產(chǎn)品第2章 使用
    發(fā)表于 08-01 15:36 ?14次下載

    什么是cds?CDS是什么意思?

    什么是cds?CDS是什么意思? CDS是相關(guān)雙取樣電路(Correlated Double Sampling), CCD傳感器的每個像素的輸出波形只在一部分時間內(nèi)是圖像信號,
    發(fā)表于 09-02 11:35 ?5.7w次閱讀

    如何解決JDK8小版本升級后性能下降的問題

    編者按:在升級 JDK8U 的小版本后(從 8u74 升級到 8u202),遇到性能劇烈下降的問題(性能下降 13 倍)。該應(yīng)用是一個非常簡單的 Web 應(yīng)用,且應(yīng)用在 JDK 升級前
    的頭像 發(fā)表于 07-26 14:44 ?4447次閱讀
    如何解決<b class='flag-5'>JDK8</b>小版本升級后性能下降的問題

    JDK8JDK11首次同時發(fā)布兩個版本

    2021 年 9 月 30 日, JDK update Q3 版本正式發(fā)布,本次發(fā)布將包含 X86_64 版本。此前,
    的頭像 發(fā)表于 10-28 10:53 ?3696次閱讀
    <b class='flag-5'>畢</b><b class='flag-5'>昇</b><b class='flag-5'>JDK8</b>和<b class='flag-5'>JDK</b>11首次同時發(fā)布兩個版本

    Fortran編譯器內(nèi)聯(lián)動態(tài)庫函數(shù)str_copy

    Fortran編譯器是一款基于classic flang的高性能Fortran編譯器,支持Fortran編程語言的編譯和運行,提供強大的數(shù)值計算和數(shù)據(jù)處理能力,在科學計算領(lǐng)域應(yīng)用前景廣闊。
    的頭像 發(fā)表于 09-21 11:35 ?1409次閱讀

    人工智能等領(lǐng)域涌現(xiàn)出多樣的異構(gòu)算力

    在開場致辭中提到,編譯器、JDK等產(chǎn)品為開發(fā)者提供全棧解決方案,實現(xiàn)性能競爭力領(lǐng)先,釋放鯤鵬、
    的頭像 發(fā)表于 09-28 09:50 ?1244次閱讀

    JDK11升級JDK17最全實踐

    2021年9月14日,Oracle發(fā)布了可以長期支持的JDK17版本,那么從JDK11到JDK17,到底帶來了哪些特性呢?亞毫秒級的ZGC效果到底怎么樣呢?值得我們升級嗎?而且升級過程
    的頭像 發(fā)表于 11-17 10:36 ?1932次閱讀
    <b class='flag-5'>JDK</b>11升級<b class='flag-5'>JDK</b>17最全實踐

    weblogic修改jdk路徑

    )路徑的情況。本文將詳細介紹如何在WebLogic中修改JDK路徑。 一、背景介紹 Java Development Kit(JDK)是Java開發(fā)人員必備的工具包,用于編譯、運行和調(diào)
    的頭像 發(fā)表于 12-05 14:46 ?1705次閱讀

    大模型應(yīng)用開發(fā)平臺+浪潮信息AIStation,讓大模型定制更簡單

    北京2024年6月5日?/美通社/ -- 近日,大模型應(yīng)用開發(fā)平臺與浪潮信息AIStation智能業(yè)務(wù)生產(chǎn)創(chuàng)新平臺完成兼容性互認證。基于和浪潮信息AIStation,用戶通過預
    的頭像 發(fā)表于 06-05 11:58 ?904次閱讀
    <b class='flag-5'>畢</b><b class='flag-5'>昇</b>大模型應(yīng)用開發(fā)平臺+浪潮信息AIStation,讓大模型定制更簡單

    JDK11升級JDK17最全實踐干貨來了

    1、前言 如果你仍在使用JDK8,那你是否曾經(jīng)遇到過OutOfMemoryError的問題?你是否曾經(jīng)為JVM的調(diào)優(yōu)問題感到困擾?本篇文章將為你介紹一種能夠提供百倍性能提升的垃圾回收器,也許能夠
    的頭像 發(fā)表于 06-25 14:50 ?1197次閱讀
    <b class='flag-5'>JDK</b>11升級<b class='flag-5'>JDK</b>17最全實踐干貨來了

    JDK8升級JDK11最全實踐干貨來了

    1、前言 截至目前(2023年),Java8發(fā)布至今已有9年,2018年9月25日,Oracle發(fā)布了Java11,這是Java8之后的首個LTS版本。那么從JDK8JDK11,到底
    的頭像 發(fā)表于 06-25 14:51 ?821次閱讀
    <b class='flag-5'>JDK8</b>升級<b class='flag-5'>JDK</b>11最全實踐干貨來了
    主站蜘蛛池模板: 国产青青草 | 一级片免费视频 | 欧美1024 | 婷婷sese | 色婷婷色综合激情国产日韩 | 资源种子在线观看 | 色婷婷综合久久久久中文一区二区 | 亚洲高清国产拍精品影院 | 亚洲酒色1314狠狠做 | 欧美成人伊人久久综合网 | 婷婷六月丁| www.狠狠操.com | 午夜免费免费啪视频观看 | 一级特黄性色生活片一区二区 | 天天寡妇色 | 免费一级毛片在级播放 | 天堂网在线资源www最新版 | 日韩欧美卡一卡二卡新区 | 天天插天天射天天操 | 五月婷婷社区 | 五月天婷婷丁香 | 一区二区三区免费视频网站 | 免费国产99久久久香蕉 | 热久久久久久 | 啪啪91视频| 色久优优 欧美色久优优 | 日本黄色免费片 | 免费日本黄色 | 免费在线观看黄 | 亚洲天堂成人网 | 免费一级特黄 欧美大片 | 五月天婷婷网址 | 国产成人综合网在线播放 | 三级黄色片免费观看 | 亚洲综合五月天欧美 | 亚洲国产午夜看片 | 欧美午夜性春猛交bbb | 亚洲欧美成人 | 国产亚洲精品美女久久久 | 日日爽夜夜 | 天天射天天搞 |