初探JAVA 10之G1收集器并行Full GC

G1收集器時(shí)JAVA 9正式引入的哼丈。JAVA 10發(fā)布之后宪躯,對(duì)G1收集器的Full GC做了優(yōu)化,優(yōu)化點(diǎn)就是把單線程的Full GC變成了多線程并行Full GC。那我們?cè)趺纯闯鲞@個(gè)優(yōu)化點(diǎn)呢芒珠?下面我們來做個(gè)實(shí)驗(yàn)。

ObjectChurn

上面的代碼會(huì)往data數(shù)組里面寫數(shù)據(jù)搅裙,重復(fù)十遍皱卓。我們先用JDK 9來看看程序GC情況如何裹芝。啟動(dòng)之前,我們加入JVM啟動(dòng)參數(shù):-Xlog:gc,gc+cpu::uptime -Xmx4g -Xms4g -Xlog:gc*:details.vgc娜汁。注:-Xlog:gc,gc+cpu::uptime就是把GC的每一個(gè)事件和CPU使用情況打印到控制臺(tái)嫂易,使用uptime作為標(biāo)簽打印在最前面。?-Xlog:gc*跟JDK 9之前的-XX:+PrintGCDetails是一樣的意思掐禁,就是打印GC詳細(xì)日志怜械,后面的details.vgc就是GC日志寫入的文件。對(duì)了傅事,我的CPU是4核缕允。

我們先用JDK 9執(zhí)行一遍該程序。執(zhí)行完畢之后分析以下打出來的日志享完。取一個(gè)cycle出來:

[13.886s] GC(106) Pause Initial Mark (G1 Humongous Allocation) 3467M->3459M(4096M) 21.957ms

[13.886s] GC(106) User=0.16s Sys=0.00s Real=0.02s

[13.886s] GC(107) Concurrent Cycle

[13.942s] GC(108) Pause Young (G1 Evacuation Pause) 3669M->3648M(4096M) 38.552ms

[13.943s] GC(108) User=0.22s Sys=0.00s Real=0.03s

[13.993s] GC(109) To-space exhausted

[13.993s] GC(109) Pause Young (G1 Evacuation Pause) 3882M->3894M(4096M) 22.696ms

[13.993s] GC(109) User=0.17s Sys=0.01s Real=0.03s

[13.997s] GC(107) Pause Remark 3914M->3914M(4096M) 1.153ms

[13.997s] GC(107) User=0.00s Sys=0.00s Real=0.00s

[14.019s] GC(110) To-space exhausted

[14.019s] GC(110) Pause Young (G1 Evacuation Pause) 4040M->4034M(4096M) 9.122ms

[14.019s] GC(110) User=0.07s Sys=0.00s Real=0.01s

[14.021s] GC(111) To-space exhausted

[14.021s] GC(111) Pause Young (G1 Evacuation Pause) 4040M->4040M(4096M) 1.599ms

[14.021s] GC(111) User=0.01s Sys=0.00s Real=0.00s

[14.784s] GC(112) Pause Full (Allocation Failure) 4040M->3331M(4096M) 762.372ms

[14.784s] GC(112) User=0.87s Sys=0.00s Real=0.77s

[14.784s] GC(107) Concurrent Cycle 898.093ms

[14.800s] GC(113) Pause Initial Mark (G1 Humongous Allocation) 3418M->3419M(4096M) 10.044ms

[14.800s] GC(113) User=0.08s Sys=0.00s Real=0.01s

[14.800s] GC(114) Concurrent Cycle

[14.839s] GC(115) Pause Young (G1 Evacuation Pause) 3623M->3594M(4096M) 23.689ms

[14.839s] GC(115) User=0.18s Sys=0.00s Real=0.02s

[14.880s] GC(116) Pause Young (G1 Evacuation Pause) 3772M->3725M(4096M) 24.273ms

[14.880s] GC(116) User=0.18s Sys=0.01s Real=0.02s

[14.890s] GC(114) Pause Remark 3813M->3813M(4096M) 1.140ms

[14.890s] GC(114) User=0.01s Sys=0.00s Real=0.00s

我標(biāo)黑了兩段日志灼芭。第一段是新生代的收集日志。user time是0.17秒般又,real time是0.03秒彼绷。user time是指gc花費(fèi)的所有CPU時(shí)間之和,real time是指gc暫停的實(shí)際時(shí)間茴迁。第二段是full gc的日志寄悯。user time是0.87秒,real time是0.77秒堕义,兩者相差無幾猜旬。

換成JDK 10再執(zhí)行一遍。

[13.589s] GC(107) To-space exhausted

[13.589s] GC(107) Pause Young (G1 Evacuation Pause) 4033M->4025M(4096M) 9.213ms

[13.589s] GC(107) User=0.05s Sys=0.01s Real=0.00s

[13.592s] GC(108) To-space exhausted

[13.592s] GC(108) Pause Young (G1 Evacuation Pause) 4033M->4031M(4096M) 2.165ms

[13.592s] GC(108) User=0.00s Sys=0.00s Real=0.00s

[13.593s] GC(109) To-space exhausted

[13.594s] GC(109) Pause Young (G1 Evacuation Pause) 4033M->4033M(4096M) 0.859ms

[13.594s] GC(109) User=0.01s Sys=0.00s Real=0.00s

[14.201s] GC(110) Pause Full (Allocation Failure) 4033M->3275M(4096M) 607.673ms

[14.202s] GC(110) User=3.94s Sys=0.03s Real=0.61s

[14.202s] GC(103) Concurrent Cycle 782.493ms

[14.204s] GC(111) Pause Initial Mark (G1 Humongous Allocation) 3277M->3277M(4096M) 1.856ms

[14.204s] GC(111) User=0.00s Sys=0.00s Real=0.00s

[14.204s] GC(112) Concurrent Cycle

[14.263s] GC(113) Pause Young (G1 Evacuation Pause) 3511M->3490M(4096M) 28.171ms

[14.263s] GC(113) User=0.20s Sys=0.01s Real=0.03s

[14.283s] GC(112) Pause Remark 3662M->3662M(4096M) 2.256ms

[14.283s] GC(112) User=0.01s Sys=0.00s Real=0.00s

[14.314s] GC(114) Pause Young (G1 Evacuation Pause) 3722M->3724M(4096M) 25.194ms

[14.314s] GC(114) User=0.16s Sys=0.00s Real=0.02s

[14.350s] GC(115) To-space exhausted

[14.350s] GC(115) Pause Young (G1 Evacuation Pause) 3910M->3915M(4096M) 18.179ms

[14.350s] GC(115) User=0.12s Sys=0.00s Real=0.02s

[14.368s] GC(116) To-space exhausted

[14.368s] GC(116) Pause Young (G1 Humongous Allocation) 4031M->4003M(4096M) 7.258ms

[14.368s] GC(116) User=0.04s Sys=0.00s Real=0.00s

[14.371s] GC(117) To-space exhausted

[14.372s] GC(117) Pause Young (G1 Evacuation Pause) 4031M->4031M(4096M) 1.698ms

[14.372s] GC(117) User=0.01s Sys=0.00s Real=0.00s

[14.938s] GC(118) Pause Full (Allocation Failure) 4031M->3318M(4096M) 566.566ms

[14.939s] GC(118) User=3.53s Sys=0.03s Real=0.56s

[14.939s] GC(112) Concurrent Cycle 734.758ms

[14.957s] GC(119) Pause Initial Mark (G1 Humongous Allocation) 3391M->3388M(4096M) 10.799ms

[14.957s] GC(119) User=0.05s Sys=0.00s Real=0.01s

[14.957s] GC(120) Concurrent Cycle

[15.005s] GC(121) Pause Young (G1 Evacuation Pause) 3572M->3518M(4096M) 30.110ms

[15.005s] GC(121) User=0.18s Sys=0.01s Real=0.03s

同樣倦卖,我也標(biāo)黑了兩段日志洒擦。第一段跟JDK 9的差不多,但是第二段就不一樣了怕膛,user time是3.53秒熟嫩,real time是0.56秒。這個(gè)差異是怎么來的呢褐捻?就是并行Full GC掸茅。JDK 10利用了CPU的多個(gè)核來做并行full gc,最后user time會(huì)增長(zhǎng)成real time的好幾倍柠逞,上面的日志里user time / real time = 6.2昧狮。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市板壮,隨后出現(xiàn)的幾起案子逗鸣,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件慕购,死亡現(xiàn)場(chǎng)離奇詭異聊疲,居然都是意外死亡茬底,警方通過查閱死者的電腦和手機(jī)沪悲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來阱表,“玉大人殿如,你說我怎么就攤上這事∽钆溃” “怎么了涉馁?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)爱致。 經(jīng)常有香客問我烤送,道長(zhǎng),這世上最難降的妖魔是什么糠悯? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任帮坚,我火速辦了婚禮,結(jié)果婚禮上互艾,老公的妹妹穿的比我還像新娘试和。我一直安慰自己,他們只是感情好纫普,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布阅悍。 她就那樣靜靜地躺著,像睡著了一般昨稼。 火紅的嫁衣襯著肌膚如雪节视。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天假栓,我揣著相機(jī)與錄音寻行,去河邊找鬼。 笑死但指,一個(gè)胖子當(dāng)著我的面吹牛寡痰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播棋凳,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼拦坠,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了剩岳?” 一聲冷哼從身側(cè)響起贞滨,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后晓铆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體勺良,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年骄噪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了尚困。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡链蕊,死狀恐怖事甜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情滔韵,我是刑警寧澤逻谦,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站陪蜻,受9級(jí)特大地震影響邦马,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜宴卖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一滋将、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嘱腥,春花似錦耕渴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至分苇,卻和暖如春添诉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背医寿。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工栏赴, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人靖秩。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓须眷,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親沟突。 傳聞我的和親對(duì)象是個(gè)殘疾皇子花颗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

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