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

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

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

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

畢昇JDK 8 Dynamic CDS特性介紹

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

1 背景

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

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

擴(kuò)大archive的類的范圍:CDS -> AppCDS -> Dynamic CDS。

擴(kuò)大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 的支持,擴(kuò)展了共享類的支持范圍;且該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é)束時對類進(jìn)行動態(tài)歸檔生成top JSA,top JSA將包含base JSA以外所有可以共享的類(包含Custom ClassLoader加載的類),共享類范圍的擴(kuò)大提供了更短的啟動時間,而且Dynamic CDS對于額外共享的類采用重定位(relocate)到一個更加緊湊的內(nèi)存空間以減少空間的浪費。

base JSA:使用CDS/AppCDS生成的類共享文件,當(dāng)不指定其路徑時,默認(rèn)為:$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 用戶指定進(jìn)程退出時生成 top JSA 文件路徑。文件名支持按照進(jìn)程號 %p 輸出,可避免多JVM進(jìn)程復(fù)寫一份 top JSA,導(dǎo)致 top JSA 不可用
日志開關(guān) -XX:InfoDynamicCDS 打開級別為 info 的日志,可以通過 -XX:DynamicCDSLog=PATH 設(shè)置輸出路徑,默認(rèn)為標(biāo)準(zhǔn)輸出流
-XX:DebugDynamicCDS 打開級別為 debug 的日志,其余同上
-XX:TraceDynamicCDS 打開級別為 trace 的日志,其余同上

3.2 使用步驟

分為兩個步驟:

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

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

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

預(yù)置條件: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ù)改變,導(dǎo)致 JDK 包中帶的 default JSA 無法使用,請重新用 CDS/AppCDS 生成 base JSA。

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

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

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

步驟二:使用 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 默認(rèn)為8,讀取時不支持指定其他對齊參數(shù)。

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

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

Anerrorhasoccurredwhileprocessingthesharedarchivefile.
UnabletomapReadOnlysharedspaceatrequiredaddress.
ErroroccurredduringinitializationofVM
Unabletousesharedarchive.

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

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

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

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

ErroroccurredduringinitializationofVM
Unabletousesharedarchive.:UseCompressedOopsandUseCompressedClassPointersmustbeonforUseSharedSpaces.
Classdatasharingisinconsistentwithotherspecifiedoptions.

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

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

最大堆地址值需小于32G(當(dāng)使用默認(rèn)參數(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 特性相比于默認(rèn)參數(shù) java -jar spring-petclinic-2.5.0-SNAPSHOT.jar 啟動效率會提升14.3%。

5 特性演進(jìn)

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

審核編輯:湯梓紅

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

    關(guān)注

    0

    文章

    5

    瀏覽量

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

    關(guān)注

    0

    文章

    82

    瀏覽量

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

    關(guān)注

    0

    文章

    14

    瀏覽量

    14537

原文標(biāo)題:畢昇JDK 8 Dynamic CDS 特性介紹

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

收藏 人收藏

    評論

    相關(guān)推薦

    關(guān)于杯,求助

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

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

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

    JDK 15安裝步驟及新特性

    。  JDK 15 新特性說明  JDK 15 為用戶提供了14項主要的增強/更改,包括一個孵化器模塊,三個預(yù)覽功能,兩個不推薦使用的功能以及兩個刪除功能。  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 ?4326次閱讀
    如何解決<b class='flag-5'>JDK8</b>小版本升級后性能下降的問題

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

    2021 年 9 月 30 日, JDK update Q3 版本正式發(fā)布,本次發(fā)布將包含 X86_64 版本。此前,
    的頭像 發(fā)表于 10-28 10:53 ?3575次閱讀
    <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ù)處理能力,在科學(xué)計算領(lǐng)域應(yīng)用前景廣闊。
    的頭像 發(fā)表于 09-21 11:35 ?1317次閱讀

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

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

    JDK11升級JDK17最全實踐

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

    weblogic修改jdk路徑

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

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

    北京2024年6月5日?/美通社/ -- 近日,大模型應(yīng)用開發(fā)平臺與浪潮信息AIStation智能業(yè)務(wù)生產(chǎn)創(chuàng)新平臺完成兼容性互認(rèn)證。基于和浪潮信息AIStation,用戶通過預(yù)
    的頭像 發(fā)表于 06-05 11:58 ?770次閱讀
    <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 ?1069次閱讀
    <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 ?712次閱讀
    <b class='flag-5'>JDK8</b>升級<b class='flag-5'>JDK</b>11最全實踐干貨來了
    主站蜘蛛池模板: 天天综合色天天综合色sb | 五月婷婷婷婷 | 日本一级成人毛片免费观看 | 色多多在线视频 | 日本理论午夜中文字幕第一页 | 91久娇草 | 黄色天堂 | 伊人久久大香线蕉综合高清 | 黄色小视频免费 | 性欧美大战久久久久久久久 | 天天干免费视频 | 国产成人精品高清在线 | 日本肥妇| 日本免费网站 | 看黄网站在线看 | 性做久久久久久久免费看 | 国产伦子一区二区三区四区 | 亚洲伊人久久大香线蕉结合 | 视频一区在线观看 | 婷婷激情综合 | 午夜在线观看cao | 中国美女毛片 | 日本特黄绿像大片免费看 | 88xx成人永久免费观看 | 午夜精品久久久久久久第一页 | 性刺激的欧美三级视频 | 五月天在线播放 | 日日噜噜爽爽狠狠视频 | 夜夜夜爽 | 免费看黄色网页 | japan日韩xxxx69hd jdav视频在线观看 | 黄在线视频 | 狠狠干狠狠操视频 | 日韩免费三级 | 天堂成人一区二区三区 | 色综合天天综合网国产成人网 | 国产精品成人免费观看 | 男人边吃奶边做视频免费网站 | 日韩在线视频www色 日韩在线视频免费观看 | 极品吹潮视频大喷潮tv | 视频在线观看高清免费看 |