JDK13之AppCDS使用-性能優(yōu)化利器

為了執(zhí)行字節(jié)碼秕狰,JVM需要一些準(zhǔn)備的工作。給類名躁染,在磁盤上查找類鸣哀,加載它,驗(yàn)證字節(jié)碼吞彤,將類裝載為自己的內(nèi)部數(shù)據(jù)結(jié)構(gòu)我衬,每一步都需要花費(fèi)一些時(shí)間,想想每次JVM都要加載成千上萬(wàn)個(gè)類饰恕,這時(shí)時(shí)間上的花費(fèi)很明顯可以看得出來(lái)挠羔。

因?yàn)镴ar包并沒(méi)有改變,class-data一直都是相同的埋嵌,每次JVM執(zhí)行的也是相同的查找破加,加載,驗(yàn)證動(dòng)作雹嗦。

AppCDS就是讓類只做一次上述的驗(yàn)證范舀,加載動(dòng)作,然后將其打包了罪,后續(xù)在運(yùn)行相同的jar包時(shí)锭环,直接從打包文件中讀取類數(shù)據(jù),或者當(dāng)前同時(shí)運(yùn)行的JVM實(shí)例直接共享一份相同的類數(shù)據(jù)泊藕。

  • 不需要在進(jìn)行復(fù)雜的類加載機(jī)制的每一步
  • 多個(gè)JVM實(shí)例同時(shí)運(yùn)行時(shí)辅辩,可以共享內(nèi)存區(qū)

使用方式

使用APPCDS的完整步驟一般如下,不過(guò)現(xiàn)在JDK13簡(jiǎn)化了我們的操作娃圆,一般我不需要進(jìn)行下面的所有步驟汽久。

1 創(chuàng)建一個(gè)class的列表,讓這些class可以被打包踊餐。

-XX:DumpLoadedClassList

2 創(chuàng)建歸檔使用

-Xshare:dump  -XX:SharedArchiveFile

3 使用歸檔

-Xshare:on -XX:SharedArchiveFile

歸檔系統(tǒng)類

創(chuàng)建歸檔

在JDK13中景醇,系統(tǒng)內(nèi)置的共享類以及被默認(rèn)創(chuàng)建了,位于${JAVA_HOME}/lib/server目錄下

# 例如
ls /Library/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home/lib/server
# 列出classes.jsa   libjsig.dylib libjvm.dylib
image-20191105072238204

使用歸檔

打印類加載日志吝岭,查看日志文件中的信息三痰,如果出現(xiàn)shared objects files代表使用了appcds的歸檔文件。

注意:不是所有的類都會(huì)被共享窜管,當(dāng)前我們自定義的類仍然會(huì)走全部的類裝載流程散劫。

# 使用歸檔文件
/Library/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home/bin/java  -Xlog:class+load:file=cds.log -XX:SharedArchiveFile=jdk13.jsa -jar target/HelloApp.jar

# 不使用歸檔文件
/Library/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home/bin/java  -Xlog:class+load:file=nocds.log -Xshare:off -jar target/HelloApp.jar

image-20191105072957619

時(shí)間對(duì)比

明顯看出來(lái)在使用歸檔之后用戶態(tài)的時(shí)間縮短了一些,這次jar包幕帆,僅僅打印Hello World获搏,沒(méi)有做任何事情,如果在類增多的時(shí)候失乾,效果就非常明細(xì)常熙。

time /Library/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home/bin/java  -XX:SharedArchiveFile=jdk13.jsa -jar target/HelloApp.jar

time /Library/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home/bin/java  -Xshare:off -jar target/HelloApp.jar
image-20191105073214565

歸檔自定義類

其實(shí)JDK13已經(jīng)默認(rèn)幫我們把系統(tǒng)的類文件進(jìn)行歸檔了纬乍,我們?cè)谑褂玫臅r(shí)候也不需要指定什么參數(shù),默認(rèn)-Xshare:on裸卫。系統(tǒng)類的歸檔我們不需要關(guān)系太多仿贬,那么如何打包我們的應(yīng)用類文件呢。

1 使用-XX:DumpLoadedClassList=classes.lst 查看當(dāng)前JVM裝載的類列表

image-20191105074017506

2 使用-XX:SharedClassListFile=classes.lst來(lái)指定那些類需要共享墓贿,以及指定-XX:SharedArchiveFile=app-cds.jsa打包文件位置茧泪,這里不需要使用-jar來(lái)運(yùn)行程序,指定jar包的位置即可聋袋。

/Library/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home/bin/java -Xshare:dump  -XX:SharedClassListFile=classes.lst  -XX:SharedArchiveFile=jdk13-custom.jsa --class-path  target/HelloApp.jar
image-20191105074522145

3 可以在JVM退出的時(shí)候队伟,自動(dòng)歸檔,使用選項(xiàng)-XX:ArchiveClassesAtExit=app-cds.jsa

4 使用歸檔文件

/Library/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home/bin/java  -XX:SharedArchiveFile=jdk13-custom.jsa -jar target/HelloApp.jar
image-20191105074817756

問(wèn)題

有過(guò)有人更新了jar包的內(nèi)容幽勒,共享類會(huì)怎么處理缰泡?

可以查看日志看一下,是否會(huì)加載修改后的類代嗤。-Xlog:class+load:file=cds.log

如果有任何問(wèn)題棘钞,還是-Xlog:class+load:file=cds.log看一下情況。

最后

JDK13中使用AppCDS的選項(xiàng)-XX:ArchiveClassesAtExit=${ARCHIVE}干毅,-XX:SharedArchiveFile=${ARCHIVE}

參考:https://blog.codefx.org/java/application-class-data-sharing/#Launch-Time-Measurements

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宜猜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子硝逢,更是在濱河造成了極大的恐慌姨拥,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渠鸽,死亡現(xiàn)場(chǎng)離奇詭異叫乌,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)徽缚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門憨奸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人凿试,你說(shuō)我怎么就攤上這事排宰。” “怎么了那婉?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵板甘,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我详炬,道長(zhǎng)盐类,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮在跳,結(jié)果婚禮上枪萄,老公的妹妹穿的比我還像新娘。我一直安慰自己硬毕,他們只是感情好呻引,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布礼仗。 她就那樣靜靜地躺著吐咳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪元践。 梳的紋絲不亂的頭發(fā)上韭脊,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音单旁,去河邊找鬼沪羔。 笑死,一個(gè)胖子當(dāng)著我的面吹牛象浑,可吹牛的內(nèi)容都是我干的蔫饰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼愉豺,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼篓吁!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起蚪拦,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤杖剪,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后驰贷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盛嘿,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年括袒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了次兆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锹锰,死狀恐怖类垦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情城须,我是刑警寧澤蚤认,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站糕伐,受9級(jí)特大地震影響砰琢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一陪汽、第九天 我趴在偏房一處隱蔽的房頂上張望训唱。 院中可真熱鬧,春花似錦挚冤、人聲如沸况增。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)澳骤。三九已至,卻和暖如春澜薄,著一層夾襖步出監(jiān)牢的瞬間为肮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工肤京, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留颊艳,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓忘分,卻偏偏與公主長(zhǎng)得像棋枕,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子妒峦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容