JDK13常見(jiàn)問(wèn)題與解答

前面提到了一些JDK13的新特性捷雕,但是還是有一些覆蓋不全的地方,可能會(huì)存在一些問(wèn)題壶熏,這里嘗試回答這些問(wèn)題浦译。

AppCDS

在多個(gè)JVM實(shí)例運(yùn)行的時(shí)候帽哑,這幾個(gè)實(shí)例之間是不是共享class數(shù)據(jù)祝拯?

AppCDS背后的設(shè)計(jì)是只需要?jiǎng)?chuàng)建一次class-data的歸檔她肯,然后共享它,后續(xù)JVM不需要重新創(chuàng)建而已康嘉。另外AppCDS只是減少了類加載的時(shí)間籽前,在程序運(yùn)行的時(shí)候,并沒(méi)有共享class信息肄梨。

但其實(shí)從另外一方面挠锥,在運(yùn)行的時(shí)候創(chuàng)建的對(duì)象肯定是相互獨(dú)立的,而class信息粱侣,如果加載也是從共享的歸檔加載的蓖宦,一定程度上也算是共享了class的信息。

class-data指的具體是什么東西柠偶?

根據(jù)命令行指定睬关,-XX:DumpLoadedClassList,或者名字该肴,存儲(chǔ)的就是class的信息藐不。

如果當(dāng)class信息變化的時(shí)候呢,class-data相當(dāng)于緩存的作用涎嚼,這樣肯定存在數(shù)據(jù)不一致的問(wèn)題法梯?

其實(shí),這個(gè)應(yīng)該是什么時(shí)候class-data會(huì)失效立哑,如何檢測(cè)到class-data會(huì)失效铛绰。

為了檢測(cè)到class-path不匹配,在創(chuàng)建歸檔的時(shí)候JVM嵌入了列出class-path下的內(nèi)容字符串捂掰,當(dāng)我們的應(yīng)用使用歸檔的時(shí)候这嚣,JVM比較實(shí)際的類路徑內(nèi)容,和嵌入的類路徑內(nèi)容吏垮,只有嵌入的路徑是實(shí)際路徑的前綴才進(jìn)行運(yùn)行卧土。

To have a decent chance at detecting a class path mismatch, the JVM embeds the string that lists the class path content in the archive when creating it. When you launch the app with the archive, the JVM compares the actual class path with the embedded one and only launches if the latter is a prefix of the former.

另外既然是我們手動(dòng)創(chuàng)建的歸檔內(nèi)容,那么最好創(chuàng)建正確的歸檔旅敷,JDK13提供了選項(xiàng)颤霎。-XX:ArchiveClassesAtExit=app-cds.jsa 退出的時(shí)候自動(dòng)創(chuàng)建歸檔友酱,那么更新,應(yīng)用之后重啟一下缔杉。

如果兩個(gè)應(yīng)用在使用一個(gè)歸檔或详,結(jié)果這個(gè)時(shí)候歸檔更新了郭计,程序會(huì)出現(xiàn)問(wèn)題嗎椒振?

我覺(jué)得程序運(yùn)行的時(shí)候都是把文件先加載到內(nèi)存的,不可能每次從文件系統(tǒng)上再讀一次庐杨。磁盤(pán)上的變化不會(huì)影響內(nèi)存中的內(nèi)容夹供。

AppCDS主要減少了應(yīng)用加載的時(shí)間罩引,那么使用 -Xverify:none-noverify 會(huì)不會(huì)有相似的效果呢枝笨?

-Xverify:none-noverify 在JDK13中標(biāo)記為丟棄,計(jì)劃未來(lái)移除剔桨,https://bugs.openjdk.java.net/browse/JDK-8218003

看下實(shí)際運(yùn)行的效果:

首先打包下歸檔:

/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
/Library/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home/bin/java  -XX:SharedArchiveFile=jdk13-custom.jsa -jar target/HelloApp.jar
time /Library/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home/bin/java -Xshare:off -noverify  -XX:SharedArchiveFile=jdk13-custom.jsa -jar target/HelloApp.jar

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

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

可以明顯的看出來(lái)洒缀,AppCDS還是最快的欺冀。

image-20191112073304430

ZGC

在ZGC中有個(gè)隐轩,relocation的階段,這個(gè)階段把對(duì)象重新分配位置瘫俊,但是這時(shí)悴灵,并沒(méi)有重寫(xiě)內(nèi)存引用,會(huì)不會(huì)讀到垃圾對(duì)象川尖?

其它的垃圾收集器都是使用store barriers茫孔,ZGC使用load barriers庐船,用于跟蹤內(nèi)存嘲更。在從堆中加載數(shù)據(jù)的時(shí)候,檢查引用的元數(shù)據(jù)位篓冲,然后在引用上執(zhí)行處理
lock->unlock->read->load 讀內(nèi)存
use->assign->store->write 寫(xiě)內(nèi)存
img
img
  • remap代表對(duì)象是否被重新映射到新的位置
  • 第一次relocation壹将,根據(jù)標(biāo)記判斷是否被移動(dòng)到了新的位置
    • 如果是毛嫉,判斷是否真的在重新分配的區(qū)域
      • 不是:重新分配,返回引用
      • 是暴区,更新引用到新的位置辛臊,然后返回
    • 更新remap位,返回引用

relocate objects from fragmented memory areas to free areas in a more compact format

ZGC bypasses this cost with the fact that exactly one of the four metadata bits will be 1.

最后

這次問(wèn)題先到這里伐割,主要起到拋磚引玉的作用隔心,更深的細(xì)節(jié)還需要自己挖掘啊尚胞。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末辐真,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子耐床,更是在濱河造成了極大的恐慌楔脯,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件堪嫂,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡淹办,警方通過(guò)查閱死者的電腦和手機(jī)恶复,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)谤牡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人恐疲,你說(shuō)我怎么就攤上這事套么。” “怎么了漱凝?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)阵苇。 經(jīng)常有香客問(wèn)我感论,道長(zhǎng),這世上最難降的妖魔是什么快耿? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任芳绩,我火速辦了婚禮妥色,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘撮竿。我一直安慰自己,他們只是感情好髓需,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布房蝉。 她就那樣靜靜地躺著惨驶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪粗卜。 梳的紋絲不亂的頭發(fā)上续扔,一...
    開(kāi)封第一講書(shū)人閱讀 51,155評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音刨啸,去河邊找鬼识脆。 笑死灼捂,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的宫蛆。 我是一名探鬼主播的猛,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼叛拷!你這毒婦竟也來(lái)了猫牡?” 一聲冷哼從身側(cè)響起邓线,我...
    開(kāi)封第一講書(shū)人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤骇陈,失蹤者是張志新(化名)和其女友劉穎瑰抵,沒(méi)想到半個(gè)月后二汛,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡氓栈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年授瘦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片竟宋。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡提完,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出丘侠,到底是詐尸還是另有隱情徒欣,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布蜗字,位于F島的核電站打肝,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏秽澳。R本人自食惡果不足惜闯睹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望担神。 院中可真熱鬧始花,春花似錦妄讯、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至浇垦,卻和暖如春炕置,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工朴摊, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留默垄,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓甚纲,卻偏偏與公主長(zhǎng)得像口锭,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子介杆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

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

  • pyspark.sql模塊 模塊上下文 Spark SQL和DataFrames的重要類: pyspark.sql...
    mpro閱讀 9,451評(píng)論 0 13
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,097評(píng)論 1 32
  • 又是一年秋招季春哨,哎呀媽呀我被虐的慘來(lái)~這不荆隘,前幾陣失蹤沒(méi)更新博客,其實(shí)是我偷偷把時(shí)間用在復(fù)習(xí)課本了(霧 堅(jiān)持在社區(qū)...
    tengshe789閱讀 2,009評(píng)論 0 8
  • Lua 5.1 參考手冊(cè) by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 13,788評(píng)論 0 38
  • ClassLoader翻譯過(guò)來(lái)就是類加載器赴背,普通的java開(kāi)發(fā)者其實(shí)用到的不多臭胜,但對(duì)于某些框架開(kāi)發(fā)者來(lái)說(shuō)卻非常常見(jiàn)...
    時(shí)待吾閱讀 1,073評(píng)論 0 1