CMS收集器入門


什么是CMS盔几?

CMS全稱叫做Concurrent Mark Sweep(并發(fā)標(biāo)記清除)煌寇,是一款以獲取最短回收停頓時間為目標(biāo)的老年代收集器,適合基于B/S系統(tǒng)的服務(wù)器上共郭,系統(tǒng)停頓時間更短,給用戶帶來較好的體驗(yàn)。

從名字(包含Mark Sweep)上就可以看出澈歉,CMS收集器使用“標(biāo)記-清除”算法實(shí)現(xiàn)的,它的運(yùn)作相對于其他垃圾收集器來說是比較復(fù)雜的又碌,整個過程分四個步驟,包括:

  • 初始標(biāo)記 (CMS initial mark)
  • 并發(fā)標(biāo)記 (CMS concurrent mark)
  • 重新標(biāo)記 (CMS remark)
  • 并發(fā)清除 (CMS concurrent sweep)

其中初始標(biāo)記和重新標(biāo)記需要“Stop The World”绊袋,初始標(biāo)記僅僅是標(biāo)記一下GC Roots能直接關(guān)聯(lián)到的對象毕匀,速度很快,并發(fā)標(biāo)記階段就是進(jìn)行GC RootsTracing的過程癌别,而并發(fā)標(biāo)記階段則是為了修正并發(fā)標(biāo)記期間因?yàn)橛脩舫绦蚶^續(xù)運(yùn)作而導(dǎo)致的標(biāo)記產(chǎn)生變動的那一部分對象的標(biāo)記記錄皂岔,這個階段的停頓時間一般會比初始標(biāo)記階段稍長一些,但遠(yuǎn)比并發(fā)標(biāo)記的時間短展姐,整個過程中耗時最長的并發(fā)標(biāo)記和并發(fā)清除可以和用戶線程一起工作躁垛,所以CMS收集器的內(nèi)存回收過程是與用戶線程一起并發(fā)執(zhí)行的


CMS收集器運(yùn)行示意圖

CMS收集器調(diào)優(yōu)

調(diào)優(yōu)CMS收集器時最緊要的的工作是要避免并發(fā)模式失效和晉升失敗剖毯,并發(fā)模式失效往往是由于CMS不能以足夠快的速度清理老年代空間:新生代進(jìn)行垃圾回收時候,CMS收集器計算發(fā)現(xiàn)老年代沒有足夠空間可以容納這些晉升對象教馆,不得不先對老年代進(jìn)行來及回收逊谋,初始時老年代ko空間中對象一個接一個有序排列的,當(dāng)老年代空間占用達(dá)到某個程度(默認(rèn)70%)時土铺,并發(fā)回收就開始了胶滋,一個收集器必須在老年代30%空間用盡之前,完成老年代空間的掃描及回收工作悲敷,如果并發(fā)回收再這場速度競賽中失利究恤,CMS就會發(fā)生并發(fā)模式失效

有以下途徑可以避免發(fā)生這種失效:

  • 想辦法增大老年代空間,要么只移動部分的新生代對象到老年代后德,要么增加更多的堆空間部宿。
  • 以更高的頻率運(yùn)行后臺回收線程。
  • 使用更多的后臺回收線程探遵。

CMS收集器使用二個配置MaxGCPauseMllis=N和GCTimeRatio=N來確定使用多大的堆和多大的代空間窟赏。

1.給后臺線程更多的運(yùn)行機(jī)會

為了讓CMS收集器贏得這場賽跑妓柜,方法一就是更早的啟動并發(fā)收集器周期箱季,顯然的,CMS收集器在老年代空間占用達(dá)到60%是啟動并發(fā)收集棍掐,這個老年代空間占用到70%才啟動相比藏雏,前者完成垃圾收集的幾率更大

2.調(diào)整CMS后臺線程

每個CMS后臺線程都會100%地占用機(jī)器上的一個CPU,如果發(fā)生并發(fā)模式失效作煌,同同時又有額外的CPU周期可用掘殴,可以設(shè)置-XX:ConcGCThreads= N標(biāo)志,增加后臺線程數(shù)目粟誓。默認(rèn)情況下ConcGCThreads的值是根據(jù)parallelGCThreads標(biāo)志的值計算得到的
:ConcGCThreads = ( parallelGCThreads + 3 )/ 4


參考文獻(xiàn):
Java并發(fā)編程博客 - 不可錯過的CMS學(xué)習(xí)筆記
CMS并發(fā)失效與晉升失敗
深入理解JAVA虛擬機(jī)JVM高級特性與最佳實(shí)踐(第2版)
Java性能權(quán)威指南

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末奏寨,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鹰服,更是在濱河造成了極大的恐慌病瞳,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悲酷,死亡現(xiàn)場離奇詭異套菜,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)设易,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門逗柴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人顿肺,你說我怎么就攤上這事戏溺≡希” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵于购,是天一觀的道長袍睡。 經(jīng)常有香客問我,道長肋僧,這世上最難降的妖魔是什么斑胜? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮嫌吠,結(jié)果婚禮上止潘,老公的妹妹穿的比我還像新娘。我一直安慰自己辫诅,他們只是感情好凭戴,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著炕矮,像睡著了一般么夫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上肤视,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天档痪,我揣著相機(jī)與錄音,去河邊找鬼邢滑。 笑死腐螟,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的困后。 我是一名探鬼主播乐纸,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼摇予!你這毒婦竟也來了汽绢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤侧戴,失蹤者是張志新(化名)和其女友劉穎宁昭,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體救鲤,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡久窟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了本缠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斥扛。...
    茶點(diǎn)故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出稀颁,到底是詐尸還是另有隱情芬失,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布匾灶,位于F島的核電站棱烂,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏阶女。R本人自食惡果不足惜颊糜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望秃踩。 院中可真熱鬧衬鱼,春花似錦、人聲如沸憔杨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽消别。三九已至抛蚤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間寻狂,已是汗流浹背岁经。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留荆虱,地道東北人蒿偎。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓朽们,卻偏偏與公主長得像怀读,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子骑脱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評論 2 349

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