JVM垃圾收集器

Serial收集器內(nèi)容精講

簡(jiǎn)介:serial垃圾收集器講解

Serial垃圾回收器
  • hashMap list羔杨,hashcode

  • 是什么赚瘦?

    • 收集算法是內(nèi)存收到的方法論苔悦,垃圾回收器是內(nèi)存回收的具體實(shí)現(xiàn)蕉鸳。
    • Serial是一個(gè)單線程的垃圾收集器
  • serial垃圾收集器的特點(diǎn)

    • “Stop The World”,它進(jìn)行垃圾收集時(shí)尉剩,必須暫停其他所有的工作線程真慢,直到它收集結(jié)束毅臊。在用戶(hù)不可見(jiàn)的情況下把用戶(hù)正常工作的線程全部停掉
    • 使用場(chǎng)景:多用于桌面應(yīng)用理茎,Client端的垃圾回收器
    • 桌面應(yīng)用內(nèi)存小,進(jìn)行垃圾回收的時(shí)間比較短管嬉,只要不頻繁發(fā)生停頓就可以接受

ParNew收集器內(nèi)容精講

簡(jiǎn)介:parnew垃圾收集器圖解分析特點(diǎn)

ParNew垃圾回收
  • 是什么皂林?

    • ParNew(回收的是新生代) 收集器其實(shí)就是 Serial 收集器的多線程版本,除了使用多條線程進(jìn)行垃圾收集之外蚯撩,其余行為包括 Serial 收集器可用的所有控制參數(shù)(例如:-XX: SurvivorRatio础倍、-XX: PretenureSize' Threshold、-XX: HandlePromotionFailure 等)胎挎、收集算法沟启、Stop The World、對(duì)象分配規(guī)則犹菇、回收策略等都與 Serial 收集器完全一樣德迹,在實(shí)現(xiàn)上,這兩種收集器也共用了相當(dāng)多的代碼
  • parnew垃圾收集器的特點(diǎn)揭芍?

    • ParNew 收集器除了多線程收集之外胳搞,其他與 Serial 收集器相比并沒(méi)有太多創(chuàng)新之處,但它卻是許多運(yùn)行在 Server 模式下的虛擬機(jī)中首選的新生代收集器,其中有一個(gè)與性能無(wú)關(guān)但很重要的原因是肌毅,除了 Serial 收集器外筷转,目前只有它能與 CMS 收集器配合工作。
    • 使用-XX: ParallelGCThreads 參數(shù)來(lái)限制垃圾收集的線程數(shù)
    • 多線程操作存在上下文切換的問(wèn)題悬而,所以建議將-XX: ParallelGCThreads設(shè)置成和CPU核數(shù)相同呜舒,如果設(shè)置太多的話(huà)就會(huì)產(chǎn)生上下文切換消耗
  • 并發(fā)與并行的概念講解 CMS垃圾回收器(CMS收集老生代,ParNew收集新生代)

    • 并行(Parallel):指多條垃圾收集線程并行工作摊滔,但此時(shí)用戶(hù)線程仍然處于等待狀態(tài)阴绢。

    • 并發(fā)(Concurrent):指用戶(hù)線程與垃圾收集線程同時(shí)執(zhí)行(但不一定是并行的,可能會(huì)交替執(zhí)行)艰躺,用戶(hù)程序在繼續(xù)運(yùn)行呻袭,而垃圾收集程序運(yùn)行于另一個(gè) CPU 上

Parallel Scavenge收集器

簡(jiǎn)介:Parallel Scavenge收集器講解

  • 是什么?

    • Parallel Scavenge 收集器是一個(gè)新生代收集器腺兴,它也是使用復(fù)制算法的收集器左电,又是并行的多線程收集器
    • 由于與吞吐量關(guān)系密切,Parallel Scavenge 收集器也經(jīng)常稱(chēng)為“吞吐量?jī)?yōu)先”收集器
    • 吞吐量是什么页响?CPU用于運(yùn)行用戶(hù)代碼的時(shí)間與CPU總時(shí)間的比值篓足,99%時(shí)間執(zhí)行用戶(hù)線程,1%時(shí)間回收垃圾 闰蚕,這時(shí)候吞吐量就是99%
  • 特點(diǎn):

    • Parallel Scavenge 收集器的特點(diǎn)是它的關(guān)注點(diǎn)與其他收集器不同栈拖,CMS 等收集器的關(guān)注點(diǎn)是盡可能地縮短垃圾收集時(shí)用戶(hù)線程的停頓時(shí)間,而 Parallel Scavenge 收集器的目標(biāo)則是達(dá)到個(gè)可控制的吞吐(Throughput)没陡。所謂吞吐量就是 CPU 用于運(yùn)行用戶(hù)代碼的時(shí)間與 CPU 總消耗時(shí)間的比值涩哟,即吞吐量=運(yùn)行用戶(hù)代碼時(shí)間/(運(yùn)行用戶(hù)代碼時(shí)間+垃圾收集時(shí)間),虛擬機(jī)總共運(yùn)行了 100 分鐘盼玄,其中垃圾收集花掉 1 分鐘贴彼,那吞吐量就是 99% 停頓時(shí)間越短就越適合需要與用戶(hù)交互的程序,良好的響應(yīng)速度能提升用戶(hù)體驗(yàn)埃儿,而高吞吐量則可以高效率地利用 CPU 時(shí)間器仗,盡快完成程序的運(yùn)算任務(wù),主要適合在后臺(tái)運(yùn)算而不需要太多交互的任務(wù)童番。

    • 虛擬機(jī)會(huì)根據(jù)當(dāng)前系統(tǒng)的運(yùn)行情況收集性能監(jiān)控信息精钮,動(dòng)態(tài)調(diào)整這些參數(shù)以提供最合適的停頓時(shí)間或者最大的吞吐量,這種調(diào)節(jié)方式稱(chēng)為 GC自適應(yīng)調(diào)節(jié)策略

    • -XX:MaxGCPauseMillis參數(shù)GC停頓時(shí)間剃斧,500MB ——>300MB,這個(gè)參數(shù)配置太小的話(huà)會(huì)發(fā)生頻繁GC

    • -XX:GCTimeRatio參數(shù)轨香,99%

  • Serial old收集器,它是一個(gè)單線程收集器悯衬,使用"標(biāo)記--整理"算法

  • Parallel old收集器弹沽,Parallel Scavenge收集器的老年代版本檀夹,使用多線程+標(biāo)記整理算法

你不得不懂的CMS收集器

簡(jiǎn)介:標(biāo)記整理算法講解以及分代收集算法講解

CMS垃圾清理
  • 是什么?

    • CMS (Concurrent Mark Sweep)收集器是-種以獲取最短回收停頓時(shí)間為目標(biāo)的收集器策橘。

    • 目前很大一部分的Java應(yīng)用集中在互聯(lián)網(wǎng)站或者B/S系統(tǒng)的服務(wù)端上,這類(lèi)應(yīng)用尤其重 視服務(wù)的響應(yīng)速度炸渡,希望系統(tǒng)停頓時(shí)間最短,以給用戶(hù)帶來(lái)較好的體驗(yàn)丽已。

    • CMS 收集器是基于“標(biāo)記-清除”算法實(shí)現(xiàn)的

  • 步驟流程:

    • 初始標(biāo)記(CMS initial mark) -----標(biāo)記一下 GC Roots 能直接關(guān)聯(lián)到的對(duì)象蚌堵,速度很快

    • 并發(fā)標(biāo)記(CMS concurrent mark --------并發(fā)標(biāo)記階段就是進(jìn)行 GC RootsTracing 的過(guò)程

    • 重新標(biāo)記(CMS remark) -----------為了修正并發(fā)標(biāo)記期間因用戶(hù)程序?qū)е聵?biāo)記產(chǎn)生變動(dòng)的標(biāo)記記錄

    • 并發(fā)清除(CMS concurrent sweep)

  • CMS垃圾收集器缺點(diǎn)

    • 對(duì)CPU資源非常敏感
    • 無(wú)法處理浮動(dòng)垃圾,程序在進(jìn)行并發(fā)清除階段用戶(hù)線程所產(chǎn)生的新垃圾
    • 標(biāo)記-清除不連續(xù)沛婴,暫時(shí)空間碎片

你不得不懂的G1收集器

簡(jiǎn)介:G1垃圾收集器

G1垃圾回收
  • 是什么

    • G1是一款面向服務(wù)端應(yīng)用的垃圾收集器
  • 特點(diǎn):

    • G1 中每個(gè) Region 都有一個(gè)與之對(duì)應(yīng)的 Remembered Set吼畏,當(dāng)進(jìn)行內(nèi)存回收時(shí),在 GC 根節(jié)點(diǎn)的枚舉范圍中加入 Remembered Set 即可保證不對(duì)全堆掃描也不會(huì)有遺漏 檢查Reference引用的對(duì)象是否處于不同的Region
  • G1 收集器的運(yùn)作大致可劃分為以下幾個(gè)步驟

    • 初始標(biāo)記(Initial Marking) --標(biāo)記一下 GC Roots 能直接關(guān)聯(lián)到的對(duì)象
    • 并發(fā)標(biāo)記(Concurrent Marking)---從GC Root 開(kāi)始對(duì)堆中對(duì)象進(jìn)行可達(dá)性分析嘁灯,找出存活的對(duì)象泻蚊,這階段耗時(shí)較長(zhǎng),但可與用戶(hù)程序并發(fā)執(zhí)行
    • 最終標(biāo)記(Final Marking) ---為了修正在并發(fā)標(biāo)記期間因用戶(hù)程序繼續(xù)運(yùn)作而導(dǎo)致標(biāo)記產(chǎn)生變動(dòng)的那一部分標(biāo)記記錄丑婿。虛擬機(jī)將這段時(shí)間對(duì)象變化記錄在線程 Remembered Set Logs 里面性雄,最終標(biāo)記階段需要把 Remembered Set Logs的數(shù)據(jù)合并到 Remembered Set 中
    • 篩選回收(Live Data Counting and Evacuation)
  • G1的優(yōu)勢(shì)有哪些

    • 空間整合:基于“標(biāo)記一整理”算法實(shí)現(xiàn)為主和Region之間采用復(fù)制算法實(shí)現(xiàn)的垃圾收集
    • 可預(yù)測(cè)的停頓:這是 G1 相對(duì)于 CMS 的另一大優(yōu)勢(shì),降低停頓時(shí)間是 G1 和 CMS 共同的關(guān)注點(diǎn)羹奉,但 G1 除了追求低停頓外秒旋,還能建立可預(yù)測(cè)的停頓時(shí)間模型
    • 在 G1 之前的其他收集器進(jìn)行收集的范圍都是整個(gè)新生代或者老年代,而 G1 不再是這樣诀拭。使用 G1 收集器時(shí)迁筛,Java 堆的內(nèi)存布局就與其他收集器有很大差別,它將整個(gè) Java 雄劃分為多個(gè)大小相等的獨(dú)立區(qū)域(Region)耕挨,雖然還保留有新生代和老年代的概念细卧,但新生代和老年代不再是物理隔髙的了,它們都是一部分 Region(不需要連續(xù))的集合俗孝。
    • G1 收集器之所以能建立可預(yù)測(cè)的停頓時(shí)間模型酒甸,是因?yàn)樗梢杂杏?jì)劃地避免在整個(gè) Java 堆中進(jìn)行全區(qū)域的垃圾收集魄健。G1 跟蹤各個(gè) Regions 里面的垃圾堆積的價(jià)值大懈陈痢(回收所獲得的空間大小以及回收所需時(shí)間的經(jīng)驗(yàn)值),在后臺(tái)維護(hù)一個(gè)優(yōu)先列表沽瘦,每次根據(jù)允許的收集時(shí)間革骨,優(yōu)先回收價(jià)值最大的 Region(這也就是 Garbage- Firsti 名稱(chēng)的來(lái)由)。這種使用 Region 劃分內(nèi)存空間以及有優(yōu)先級(jí)的區(qū)域回收方式析恋,保證了 G1 收集器在有限的時(shí)間內(nèi)可以獲取盡可能高
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末良哲,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子助隧,更是在濱河造成了極大的恐慌筑凫,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異巍实,居然都是意外死亡滓技,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)棚潦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)令漂,“玉大人,你說(shuō)我怎么就攤上這事丸边〉兀” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵妹窖,是天一觀的道長(zhǎng)纬朝。 經(jīng)常有香客問(wèn)我,道長(zhǎng)骄呼,這世上最難降的妖魔是什么玄组? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮谒麦,結(jié)果婚禮上俄讹,老公的妹妹穿的比我還像新娘。我一直安慰自己绕德,他們只是感情好患膛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著耻蛇,像睡著了一般踪蹬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上臣咖,一...
    開(kāi)封第一講書(shū)人閱讀 51,190評(píng)論 1 299
  • 那天跃捣,我揣著相機(jī)與錄音,去河邊找鬼夺蛇。 笑死疚漆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的刁赦。 我是一名探鬼主播娶聘,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼甚脉!你這毒婦竟也來(lái)了丸升?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤牺氨,失蹤者是張志新(化名)和其女友劉穎狡耻,沒(méi)想到半個(gè)月后墩剖,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡夷狰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年涛碑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片孵淘。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蒲障,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瘫证,到底是詐尸還是另有隱情揉阎,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布背捌,位于F島的核電站毙籽,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏毡庆。R本人自食惡果不足惜坑赡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望么抗。 院中可真熱鬧毅否,春花似錦、人聲如沸蝇刀。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)吞琐。三九已至捆探,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間站粟,已是汗流浹背黍图。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奴烙,地道東北人助被。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像缸沃,于是被迫代替她去往敵國(guó)和親恰起。 傳聞我的和親對(duì)象是個(gè)殘疾皇子修械,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

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