CMS 和G1 的區(qū)別

CMS收集器和G1收集器的區(qū)別

區(qū)別一: 使用范圍不一樣

CMS收集器是老年代的收集器,可以配合新生代的Serial和ParNew收集器一起使用
G1收集器收集范圍是老年代和新生代田盈。不需要結(jié)合其他收集器使用

區(qū)別二: STW的時(shí)間

CMS收集器以最小的停頓時(shí)間為目標(biāo)的收集器垛吗。

G1收集器可預(yù)測(cè)垃圾回收的停頓時(shí)間(建立可預(yù)測(cè)的停頓時(shí)間模型)

區(qū)別三: 垃圾碎片

CMS收集器是使用“標(biāo)記-清除”算法進(jìn)行的垃圾回收逮壁,容易產(chǎn)生內(nèi)存碎片

G1收集器使用的是“標(biāo)記-整理”算法凌盯,進(jìn)行了空間整合狸剃,降低了內(nèi)存空間碎片掐隐。

區(qū)別四: 垃圾回收的過(guò)程不一樣

CMS回收垃圾的4個(gè)階段

初始標(biāo)記
并發(fā)標(biāo)記
重新標(biāo)記
并發(fā)清理

初始標(biāo)記階段:會(huì)讓線程全部停止,也就是 Stop the World 狀態(tài)
并發(fā)標(biāo)記階段:對(duì)所有的對(duì)象進(jìn)行追蹤钞馁,這個(gè)階段最耗費(fèi)時(shí)虑省。但這個(gè)階段是和系統(tǒng)并發(fā)運(yùn)行的,所以不會(huì)對(duì)系統(tǒng)運(yùn)行造成影響
重新標(biāo)記階段:由于第二階段是并發(fā)執(zhí)行的僧凰,一邊標(biāo)記垃圾對(duì)象探颈,一邊創(chuàng)建新對(duì)象,老對(duì)象會(huì)變成垃圾對(duì)象训措。 所以第三階段也會(huì)進(jìn)入 Stop the World 狀態(tài)伪节,并且重新標(biāo)記,標(biāo)記的是第二階段中變動(dòng)過(guò)的少數(shù)對(duì)象绩鸣,所以運(yùn)行速度很快
并發(fā)清理階段: 這個(gè)階段也是會(huì)耗費(fèi)很多時(shí)間怀大,但由于是并發(fā)運(yùn)行的,所以對(duì)系統(tǒng)不會(huì)造成很大的影響

CMS的總結(jié)和優(yōu)缺點(diǎn)

CMS采用 標(biāo)記-清理 的算法呀闻,標(biāo)記出垃圾對(duì)象化借,清除垃圾對(duì)象。算法是基于老年代執(zhí)行的总珠,因?yàn)樾律a(chǎn)生無(wú)法接受該算法產(chǎn)生的碎片垃圾屏鳍。

優(yōu)點(diǎn):并發(fā)收集勘纯,低停頓

不足

  • 無(wú)法處理浮動(dòng)垃圾,并發(fā)收集會(huì)造成內(nèi)存碎片過(guò)多
  • 由于并發(fā)標(biāo)記和并發(fā)清理階段都是并發(fā)執(zhí)行钓瞭,所以會(huì)額外消耗CPU資源

G1回收器的特點(diǎn)

G1的出現(xiàn)就是為了替換jdk1.5種出現(xiàn)的CMS,這一點(diǎn)已經(jīng)在jdk9的時(shí)候?qū)崿F(xiàn)了窜觉,jdk9默認(rèn)使用了G1回收器翅敌,移除了所有CMS相關(guān)的內(nèi)容蠢护。G1和CMS相比必怜,有幾個(gè)特點(diǎn):

  1. 控制回收垃圾的時(shí)間:這個(gè)是G1的優(yōu)勢(shì),可以控制回收垃圾的時(shí)間鸭丛,還可以建立停頓的時(shí)間模型竞穷,選擇一組合適的Regions作為回收目標(biāo),達(dá)到實(shí)時(shí)收集的目的
  2. 空間整理:和CMS一樣采用標(biāo)記-清理的算法鳞溉,但是G1不會(huì)產(chǎn)生空間碎片瘾带,這樣就有效的使用了連續(xù)空間,不會(huì)導(dǎo)致連續(xù)空間不足提前造成GC的觸發(fā)

G1把Java內(nèi)存拆分成多等份熟菲,多個(gè)域(Region)看政,邏輯上存在新生代和老年代的概念,但是沒(méi)有嚴(yán)格區(qū)分

貼圖感受一下:

image.png

依舊存在新生代老年代的概念抄罕,但是沒(méi)有嚴(yán)格區(qū)分允蚣。Region最多分為2048個(gè)

大對(duì)象的處理

除了上面優(yōu)點(diǎn)之外,還有一個(gè)優(yōu)點(diǎn)呆贿,那就是對(duì)大對(duì)象的處理嚷兔。在CMS內(nèi)存中,如果一個(gè)對(duì)象過(guò)大做入,進(jìn)入S1冒晰、S2區(qū)域的時(shí)候大于改分配的區(qū)域,對(duì)象會(huì)直接進(jìn)入老年代母蛛。G1處理大對(duì)象時(shí)會(huì)判斷對(duì)象是否大于一個(gè)Region大小的50%翩剪,如果大于50%就會(huì)橫跨多個(gè)Region進(jìn)行存放

G1回收垃圾的4個(gè)階段

  • 初始標(biāo)記
  • 并發(fā)標(biāo)記
  • 最終標(biāo)記
  • 篩選回收

初始標(biāo)記:標(biāo)記GC Roots 可以直接關(guān)聯(lián)的對(duì)象乳怎,該階段需要線程停頓但是耗時(shí)短

并發(fā)標(biāo)記:尋找存活的對(duì)象彩郊,可以與其他程序并發(fā)執(zhí)行,耗時(shí)較長(zhǎng)

最終標(biāo)記:并發(fā)標(biāo)記期間用戶程序會(huì)導(dǎo)致標(biāo)記記錄產(chǎn)生變動(dòng)(好比一個(gè)阿姨一邊清理垃圾蚪缀,另一個(gè)人一邊扔垃圾)虛擬機(jī)會(huì)將這段時(shí)間的變化記錄在Remembered Set Logs 中秫逝。最終標(biāo)記階段會(huì)向Remembered Set合并并發(fā)標(biāo)記階段的變化。這個(gè)階段需要線程停頓询枚,也可以并發(fā)執(zhí)行

篩選回收:對(duì)每個(gè)Region的回收成本進(jìn)行排序违帆,按照用戶自定義的回收時(shí)間來(lái)制定回收計(jì)劃

什么情況下應(yīng)該考慮使用G1

參考官方文檔:

  • 實(shí)時(shí)數(shù)據(jù)占用超過(guò)一半的堆空間
  • 對(duì)象分配或者晉升的速度變化大
  • 希望消除長(zhǎng)時(shí)間的GC停頓(超過(guò)0.5-1秒)

G1設(shè)置參數(shù)

控制G1回收垃圾的時(shí)間

-XX:MaxGCPauseMillis=200 (默認(rèn)200ms)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市金蜀,隨后出現(xiàn)的幾起案子刷后,更是在濱河造成了極大的恐慌的畴,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件尝胆,死亡現(xiàn)場(chǎng)離奇詭異丧裁,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)含衔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門煎娇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人贪染,你說(shuō)我怎么就攤上這事缓呛。” “怎么了杭隙?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵哟绊,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我痰憎,道長(zhǎng)匿情,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任信殊,我火速辦了婚禮炬称,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘涡拘。我一直安慰自己玲躯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布鳄乏。 她就那樣靜靜地躺著跷车,像睡著了一般。 火紅的嫁衣襯著肌膚如雪橱野。 梳的紋絲不亂的頭發(fā)上朽缴,一...
    開(kāi)封第一講書(shū)人閱讀 49,036評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音水援,去河邊找鬼密强。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蜗元,可吹牛的內(nèi)容都是我干的或渤。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼奕扣,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼薪鹦!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤池磁,失蹤者是張志新(化名)和其女友劉穎奔害,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體地熄,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡舀武,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了离斩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片银舱。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖跛梗,靈堂內(nèi)的尸體忽然破棺而出寻馏,到底是詐尸還是另有隱情,我是刑警寧澤核偿,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布诚欠,位于F島的核電站,受9級(jí)特大地震影響漾岳,放射性物質(zhì)發(fā)生泄漏轰绵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一尼荆、第九天 我趴在偏房一處隱蔽的房頂上張望左腔。 院中可真熱鬧,春花似錦捅儒、人聲如沸液样。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鞭莽。三九已至,卻和暖如春麸祷,著一層夾襖步出監(jiān)牢的瞬間澎怒,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工阶牍, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留喷面,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓荸恕,卻偏偏與公主長(zhǎng)得像乖酬,于是被迫代替她去往敵國(guó)和親死相。 傳聞我的和親對(duì)象是個(gè)殘疾皇子融求,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345