JVM中各個垃圾收集器的使用場景

JVM中各個垃圾收集器的使用場景

在以往的文章中(垃圾收集算法)诬辈,我們講述了JVM中垃圾收集算法,像標(biāo)記-清除趴乡、標(biāo)記-整理对省、復(fù)制、分代等算法晾捏,這些只是垃圾收集的方法論蒿涎,今天要介紹的就是垃圾收集的具體實現(xiàn)---垃圾收集器。

垃圾收集器主要用于堆內(nèi)存中惦辛,先從一張圖中看下堆中老年代和新生代所適合的垃圾收集器劳秋,JDK11出來的ZGC不在其中。

image

Serial胖齐、ParNew玻淑、Parallel Scavenge用于新生代;CMS呀伙、Serial Old补履、Paralled Old用于老年代。 并且他們相互之間以相對固定的組合使用剿另。G1是一個獨立的收集器不依賴其他6種收集器箫锤。

1、Serial收集器雨女,是單線程執(zhí)行垃圾回收的麻汰,是JDK1.3之前新生代收集的唯一選擇。當(dāng)需要執(zhí)行垃圾回收時戚篙,程序會暫停一切手上的工作五鲫,然后單線程執(zhí)行垃圾回收。因為新生代的特點是對象存活率低岔擂,所以收集算法用的是復(fù)制算法位喂,把新生代存活對象復(fù)制到老年代,復(fù)制的內(nèi)容不多乱灵,性能較好塑崖。

2、Serial Old收集器痛倚,老年代的收集器规婆,與Serial一樣是單線程,不同的是算法用的是標(biāo)記-整理(Mark-Compact),因為老年代里面對象的存活率高抒蚜,如果依舊是用復(fù)制算法掘鄙,需要復(fù)制的內(nèi)容較多,性能較差嗡髓。并且在極端情況下操漠,當(dāng)存活為100%時,沒有辦法用復(fù)制算法饿这。所以需要用Mark-Compact浊伙,以有效地避免這些問題。這個收集器的主要意義也是被Client模式下的虛擬機(jī)使用长捧。如果是Server模式下嚣鄙,它的用途有兩個:一是在JDK1.5版本及之前版本與Parallel Scavenge收集器搭配使用,另外一個就是CMS收集器的后備預(yù)案串结,在并發(fā)收集發(fā)生Concurrent Mode Failure使用哑子。

下圖是Serial/Serial Old收集器運行示意圖:

image

3、ParNew收集器奉芦,ParNew同樣用于新生代赵抢,是Serial的多線程版本剧蹂,并且在參數(shù)、算法(同樣是復(fù)制算法)上也完全和Serial相同。Par是Parallel的縮寫家厌,但它的并行僅僅指的是收集多線程并行芜赌,并不是收集和原程序可以并行進(jìn)行。ParNew也是需要暫停程序一切的工作冒冬,然后多線程執(zhí)行垃圾回收伸蚯。

4、Parallel Scavenge收集器简烤,新生代的收集器剂邮,同樣用的是復(fù)制算法,也是并行多線程收集横侦。與ParNew最大的不同挥萌,它關(guān)注的是垃圾回收的吞吐量。這里的吞吐量指的是 總時間與垃圾回收時間的比例枉侧。這個比例越高引瀑,證明垃圾回收占整個程序運行的比例越小。

5榨馁、Parallel Old收集器憨栽,老年代的收集器,是Parallel Scavenge老年代的版本。其中的算法替換成Mark-Compact屑柔,標(biāo)記-整理算法屡萤。Parallel Old收集器出現(xiàn)后,“吞吐量優(yōu)先”收集器終于有了比較不錯的應(yīng)用組合锯蛀,在注重吞吐量及CPU資源敏感的場合灭衷,可以優(yōu)先考慮Parallel Scavenge收集器+Parallel Old收集器。

下圖就是Parallel Scavenge/Parallel Old收集器的運行示意圖:

image

6旁涤、CMS收集器翔曲,同樣是老年代的收集器。它關(guān)注的是垃圾回收最短的停頓時間(低停頓)劈愚,在老年代并不頻繁GC的場景下瞳遍,是比較適用的。用的是Mark Sweep菌羽,標(biāo)記-清除算法掠械。運行過程一共分為四步:初始標(biāo)記-并發(fā)標(biāo)記-重新標(biāo)記-并發(fā)清理。其中初始標(biāo)記和重新標(biāo)記仍需要STW注祖,不過速度很快猾蒂,耗時最長的是并發(fā)標(biāo)記和并發(fā)清理,由于是并發(fā)的執(zhí)行是晨,效率很高肚菠。

下圖是CMS收集器運行示意圖:

image

7、G1收集器罩缴,在JDK 1.7版本正式啟用蚊逢,是當(dāng)時最前沿的垃圾收集器。G1可以說是CMS的終極改進(jìn)版箫章,解決了CMS內(nèi)存碎片烙荷、更多的內(nèi)存空間登問題。雖然流程與CMS比較相似檬寂,但底層的原理已是完全不同终抽。高效益優(yōu)先。G1會預(yù)測垃圾回收的停頓時間桶至,原理是計算老年代對象的效益率昼伴,優(yōu)先回收最大效益的對象。堆內(nèi)存結(jié)構(gòu)的不同塞茅。以前的收集器分代是劃分新生代亩码、老年代、持久代等野瘦。G1則是把內(nèi)存分為多個大小相同的區(qū)域Region描沟,每個Region擁有各自的分代屬性飒泻,但這些分代不需要連續(xù)。

另外:伴隨著JDK11的到來吏廉,也帶來了一款新的垃圾收集器-ZGC泞遗,能處理TB級別的堆空間,這是要上天呀席覆,TB級別史辙。不過目前只支持在Linux平臺上。ZGC給Hotspot Garbage Collectors增加了兩種新技術(shù):著色指針和讀屏障佩伤,這里不做過多解析聊倔。

下面圖片給出的是設(shè)置垃圾收集常用的參數(shù):

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市生巡,隨后出現(xiàn)的幾起案子耙蔑,更是在濱河造成了極大的恐慌,老刑警劉巖孤荣,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件甸陌,死亡現(xiàn)場離奇詭異,居然都是意外死亡盐股,警方通過查閱死者的電腦和手機(jī)钱豁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來疯汁,“玉大人牲尺,你說我怎么就攤上這事√文浚” “怎么了秸谢?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵凛澎,是天一觀的道長霹肝。 經(jīng)常有香客問我,道長塑煎,這世上最難降的妖魔是什么沫换? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮最铁,結(jié)果婚禮上讯赏,老公的妹妹穿的比我還像新娘。我一直安慰自己冷尉,他們只是感情好漱挎,可當(dāng)我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著雀哨,像睡著了一般磕谅。 火紅的嫁衣襯著肌膚如雪私爷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天膊夹,我揣著相機(jī)與錄音衬浑,去河邊找鬼。 笑死放刨,一個胖子當(dāng)著我的面吹牛工秩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播进统,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼助币,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了螟碎?” 一聲冷哼從身側(cè)響起奠支,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎抚芦,沒想到半個月后倍谜,有當(dāng)?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
  • 我被黑心中介騙來泰國打工深啤, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人路星。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓溯街,卻偏偏與公主長得像,于是被迫代替她去往敵國和親洋丐。 傳聞我的和親對象是個殘疾皇子呈昔,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,914評論 2 355

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