G1收集器

G1收集器是當今收集器技術(shù)發(fā)展的最前沿成果之一。它是一款面向服務器應用的垃圾收集器忙上。研發(fā)團隊希望它未來可以替代掉CMS收集器调俘。


特點:

1.并行與并發(fā):G1能充分利用多CPU辜窑、多核環(huán)境下的硬件優(yōu)勢奖恰,使用多個CPU或是CPU核心來縮短stop the world的停頓時間吊趾。

2.分代收集:與其它收集器一樣,分代概念依然存在房官,雖然G1可以不需要與其它收集器配合就能獨立管理整個GC堆趾徽,但它能夠采用不同的方式去處理新創(chuàng)建的對象和已經(jīng)存活了一段時間续滋、熬過多次GC的舊對象以獲取更好的收集效果翰守。

3.空間整合:從整體上看,G1是基于“標記-整理”算法實現(xiàn)的和CMS的標記清理不同疲酌。而從局部上看兩個Region之間用了復制算法蜡峰。但是無論是哪種算法都不會留下空間碎片,這樣就可以保證G1收集器長時間運行朗恳,分配大對象時不會因為無法找到連續(xù)空間而提前觸發(fā)下一次GC湿颅。

4≈嘟耄可預測停頓:相對于CMS收集器來說G1還有一個優(yōu)勢是可以建立停頓預測模型油航,這讓用戶可以在明確指定在一個長度為M毫秒內(nèi)的時間片段內(nèi)消耗在垃圾收集時間不超過N毫秒。


內(nèi)存布局:

? ? ? ?G1收集器將整個Java堆分為多個大小相等的獨立區(qū)域(Region)怀浆,雖然還留著老年代和新生代的概念谊囚,但這兩者不在是物理隔離了怕享。

? ? ? ?G1之所以高效且停頓時間可預測,是因為收集器有計劃的避免在全區(qū)域進行垃圾收集镰踏,G1跟蹤各個Region里面的垃圾堆積價值大泻睢(回收所獲得的空間大小以及回收所需時間的經(jīng)驗值),在后臺維護一個優(yōu)先列表奠伪,每次根據(jù)允許的回收時間跌帐,優(yōu)先回收價值最大的Region。

? ? ? ?但是Region不可能是孤立的绊率,一個對象分配在某個Region中谨敛,它并非只能被本Region中的其他對象所引用而是可以與整個Java堆任意的對象發(fā)生引用關系。為了避免在做可達性分析時掃描整個Java堆滤否。在G1收集器的Region之間的對象引用以及其它收集器中的新生代與老年代之間的對象引用佣盒,虛擬機都是使用Remembered Set來避免全堆掃描的。

? ? ? ?G1中每個Region都有一個與之對應的Remembered Set顽聂,虛擬機發(fā)現(xiàn)程序在對Reference類型的數(shù)據(jù)進行寫操作時肥惭,會產(chǎn)生一個Write Barrier暫時中斷寫操作,檢查Reference引用的對象是否處于不同的Region之中(在分代的例子中就是檢查老年代中的對象引用了新生代中的對象)紊搪,如果是蜜葱,便通過CardTable把相關引用信息記錄到被引用對象所屬的Region的Remembered Set之中。當進行內(nèi)存回收時耀石,在GC根節(jié)點的枚舉范圍中加入Remembered Set即可保證不對全堆掃描也不會有遺漏牵囤。


回收過程:

1.初始標記:

僅僅只標記一下GC Roots能直接關聯(lián)到的對象,并且修改TAMS(Next Top at Mark Start)的值滞伟,讓下一階段用戶程序并發(fā)運行時揭鳞,能在正確可用的Region中創(chuàng)建新對象,這階段需要停頓線程梆奈,但耗時比較短野崇。

2.并發(fā)標記:

該階段時在用戶線程進行時同時并發(fā)對堆中對象做可達性分析,找出存活的對象亩钟,這階段耗時長但是并發(fā)進行乓梨。

3.最終標記:

為了修正在并發(fā)階段因系統(tǒng)繼續(xù)運行而產(chǎn)生變動得那一部分標記記錄。虛擬機將這段時間的變化記錄在Remembered Set Logs里面清酥,最終標記階段需要把Remembered Set Logs里的數(shù)據(jù)合并到Remembered Set里扶镀,這階段可停頓線程,但是可并行執(zhí)行焰轻。

4.篩選回收:

首先對各個Region的回收價值和成本進行排序臭觉,根據(jù)用戶所期望的GC停頓時間來制定回收計劃,這個階段其實也可以和用戶線程一起并發(fā)執(zhí)行的,但是因為只回收一部分Region蝠筑,時間是用戶可控制的忆肾,而且停下用戶線程將大幅提高收集效率。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末菱肖,一起剝皮案震驚了整個濱河市客冈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌稳强,老刑警劉巖场仲,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異退疫,居然都是意外死亡渠缕,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門褒繁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來亦鳞,“玉大人,你說我怎么就攤上這事棒坏⊙嗖睿” “怎么了?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵坝冕,是天一觀的道長徒探。 經(jīng)常有香客問我,道長喂窟,這世上最難降的妖魔是什么测暗? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮磨澡,結(jié)果婚禮上碗啄,老公的妹妹穿的比我還像新娘。我一直安慰自己稳摄,他們只是感情好稚字,可當我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著秩命,像睡著了一般尉共。 火紅的嫁衣襯著肌膚如雪褒傅。 梳的紋絲不亂的頭發(fā)上弃锐,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天,我揣著相機與錄音殿托,去河邊找鬼霹菊。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的旋廷。 我是一名探鬼主播鸠按,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼饶碘!你這毒婦竟也來了目尖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤扎运,失蹤者是張志新(化名)和其女友劉穎瑟曲,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體豪治,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡洞拨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了负拟。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烦衣。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖掩浙,靈堂內(nèi)的尸體忽然破棺而出花吟,到底是詐尸還是另有隱情,我是刑警寧澤厨姚,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布示辈,位于F島的核電站跳芳,受9級特大地震影響给赞,放射性物質(zhì)發(fā)生泄漏丑搔。R本人自食惡果不足惜娘香,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一知给、第九天 我趴在偏房一處隱蔽的房頂上張望您市。 院中可真熱鬧案怯,春花似錦则拷、人聲如沸玖喘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽累奈。三九已至贬派,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間澎媒,已是汗流浹背搞乏。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留戒努,地道東北人请敦。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親侍筛。 傳聞我的和親對象是個殘疾皇子萤皂,可洞房花燭夜當晚...
    茶點故事閱讀 43,658評論 2 350

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