深入理解JVM3 - 垃圾收集器2

CMS收集器

CMS(Concurrent Mark Sweep)收集器是一種以獲取最短回收停頓時間為目標的收集器膘流。目前很大一部分的Java應(yīng)用集中在互聯(lián)網(wǎng)站或者B/S系統(tǒng)的服務(wù)端上,這類應(yīng)用尤其重視服務(wù)的響應(yīng)速度劈榨,希望系統(tǒng)停頓時間最短,以給用戶帶來較好的體驗赁炎。
CMS收集器是基于“標記-清除”算法實現(xiàn)的盾鳞,它的運作過程相對于前面幾種收集器來說更復(fù)雜,可以分為四個步驟:

  • 初始標記(CMS initial mark)
  • 并發(fā)標記(CMS concurrent mark)
  • 重新標記(CMS remark)
  • 并發(fā)清除(CMS concurrent sweep)
    其中初始標記和重新標記仍然需要“Stop The World”拱燃。 初始標記只標記GC Roots能直接關(guān)聯(lián)到的對象,速度很快力惯, 并發(fā)標記階段就是進行GC Roots Tracing的過程碗誉,而重新標記階段則是為了修正并發(fā)標記期間因用戶程序繼續(xù)運作而導(dǎo)致標記產(chǎn)生變動的那一部分對象的標記記錄,這個階段的停頓時間一般會比初始階段稍長一些父晶,但是比并發(fā)標記時間短哮缺。


    CMS

    CMS的優(yōu)點是并發(fā)收集,低停頓甲喝,但是有三個明顯的缺點:

  • CMS收集器對CPU資源非常敏感尝苇。面向并發(fā)設(shè)計的程序都對CPU敏感。在并發(fā)階段雖然不會導(dǎo)致用戶線程停止埠胖,但是會因為占用一部分線程(或者說CPU資源)而導(dǎo)致應(yīng)用程序變慢糠溜,總吞吐量會降低。
  • CMS 收集器無法處理浮動垃圾(Floating Garbage)直撤,可能出現(xiàn)(Concurrent Mode Failure)失敗而導(dǎo)致另一次Full GC的產(chǎn)生非竿。因為CMS并發(fā)清理階段用戶線程還在運行著,伴隨著程序運行自然就會產(chǎn)生新的垃圾谋竖,這一部分垃圾出現(xiàn)在標記過程之后红柱,CMS無法當次收集這些垃圾。這一部分垃圾就稱為浮動垃圾蓖乘。
  • 還有最后一個缺點是CMS 是基于“標記-清除”算法實現(xiàn)的收集器豹芯,這種收集算法會在垃圾手機結(jié)束時產(chǎn)生大量的碎片∏茫空間碎片過多時,將會給大對象的分配帶來很大的麻煩宽闲,往往會出現(xiàn)老生代還有很大的空間剩余众眨,但是無法找到足夠大的連續(xù)空間來分配當前對象,不得不提前觸發(fā)一次Full GC

G1 收集器

G1(Garbage-Frist)收集器是當今收集器技術(shù)發(fā)展最前沿的成果之一容诬,G1是一款面相服務(wù)端應(yīng)用的垃圾收集器娩梨。HotSpot計劃使用G1收集器替換掉JDK1.5中發(fā)布的CMS收集器, 與其他收集器相比G1具備以下幾個特點:

  • 并行和并發(fā):G1能充分利用多CPU,多核環(huán)境下的硬件優(yōu)勢览徒,使用多個CPU(CPU或者CPU核心)來縮短STW停頓時間狈定,部分其他收集器原本需要停頓Java線程執(zhí)行的GC動作,G1收集器仍然可以通過并發(fā)的方式讓Java程序繼續(xù)執(zhí)行。
  • 分代收集:與其他收集器一樣纽什,分代的概念在G1中依然存在措嵌。雖然G1可以不需要其他收集器配合就能管理整個GC堆,但它能夠采用不同的方式去處理新創(chuàng)建的對象和已經(jīng)存活了一段時間芦缰、熬過多次GC的舊對象以獲取更好的收集效果企巢。
  • 空間整合:G1 從整體來看是基于“標記-整理”算法實現(xiàn)的收集器,從局部(兩個region)上來看是基于“復(fù)制”算法實現(xiàn)的让蕾,這兩種算法在收集期間都會導(dǎo)致內(nèi)存碎片浪规,不會應(yīng)為大對象內(nèi)存無法分配而導(dǎo)致Full GC
  • 可預(yù)測的停頓: G1可以建立可預(yù)測的停頓時間模型,能讓使用者明確指定一個長度為M毫秒的時間片段內(nèi)探孝,消耗在垃圾收集上的時間不得超過N毫秒笋婿。
    G1收集器的運作步驟大致分為4步:
    • 初始標記( Initial Marking)
    • 并發(fā)標記( Concurrent Marking)
    • 最終標記(Final Marking)
    • 篩選回收( Live Data Counting and Evacuation)
      前兩步和CMS類似,最終標記是為了修正并發(fā)標記期間因用戶程序繼續(xù)運作而導(dǎo)致標記產(chǎn)生變動的那一部分標記記錄顿颅,虛擬機將這段事件對象的變化記錄在線程Remembered Set Logs里面缸濒,最終標記階段需要把Remembered Set Logs的數(shù)據(jù)合并到Remembered Set中,這階段需要停頓線程元镀,但是可并行執(zhí)行绍填。最后在篩選回收階段首先對各個Region的回收價值和成本進行排序,根據(jù)用戶所期望的GC停頓時間來制定回收計劃栖疑,這個階段也可以做到和用戶線程并發(fā)執(zhí)行讨永。


      G1
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市遇革,隨后出現(xiàn)的幾起案子卿闹,更是在濱河造成了極大的恐慌,老刑警劉巖萝快,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锻霎,死亡現(xiàn)場離奇詭異,居然都是意外死亡揪漩,警方通過查閱死者的電腦和手機旋恼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奄容,“玉大人冰更,你說我怎么就攤上這事“豪眨” “怎么了撬陵?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵琳拨,是天一觀的道長菊霜。 經(jīng)常有香客問我流部,道長谆刨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任归斤,我火速辦了婚禮痊夭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘官册。我一直安慰自己生兆,他們只是感情好,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布膝宁。 她就那樣靜靜地躺著鸦难,像睡著了一般。 火紅的嫁衣襯著肌膚如雪员淫。 梳的紋絲不亂的頭發(fā)上合蔽,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機與錄音介返,去河邊找鬼拴事。 笑死,一個胖子當著我的面吹牛圣蝎,可吹牛的內(nèi)容都是我干的刃宵。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼徘公,長吁一口氣:“原來是場噩夢啊……” “哼牲证!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起关面,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤坦袍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后等太,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捂齐,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年缩抡,在試婚紗的時候發(fā)現(xiàn)自己被綠了奠宜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡瞻想,死狀恐怖压真,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情内边,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布待锈,位于F島的核電站漠其,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜和屎,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一拴驮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧柴信,春花似錦套啤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至绪氛,卻和暖如春唆鸡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背枣察。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工争占, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人序目。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓臂痕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親猿涨。 傳聞我的和親對象是個殘疾皇子握童,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

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