CMS和G1的漏標問題解決及三色標記算法圖解

上一篇 <<<G1能作為JDK9默認垃圾回收器的優(yōu)勢分析
下一篇 >>>GC中新生代進入老年代的方式匯總


三色標記算法:GCRoot如果想查找到存活對象,會根據(jù)可達分析算法分析,遍歷整個引用鏈 ,按照是否訪問過該對象分成三種不同的顏色盒子(容器):白色肚菠、灰色苞尝、黑色盒子肉渴。

白色:本對象沒有被訪問過 (沒有被GCRoot掃描過阐污,有可能是為垃圾對象)溺忧;
灰色:本對象已經(jīng)被訪問過(被GCRoot掃描過)融欧,且本對象中的屬性沒有被GCRoot掃描敏弃,該對象就是為灰色對象;如果該對象的屬性被掃描的情況下噪馏,從灰色變?yōu)楹谏?br> 黑色:本對象已經(jīng)被訪問過(被GCRoot掃描過)麦到,且本對象中的屬性已經(jīng)被GCRoot掃描過,該對象就是為黑色對象欠肾。

三色標記算法原理

a瓶颠、在初始階段的時候,所有的對象都是存放在白色容器中刺桃。



b粹淋、初始標記階段,GCRoot標記直接關聯(lián)對象置為灰色



c、并發(fā)標記階段桃移,掃描整個引用鏈屋匕,有子節(jié)點的話,則當前節(jié)點變?yōu)楹谏杞埽庸?jié)點變?yōu)榛疑?br>

d过吻、在白色盒子剩下的對象都是為沒有被GCRoot關聯(lián)的對象,可能會被垃圾回收機制清理第步。
e疮装、下次GCRoot起點從灰色節(jié)點開始計算

三色標記算法缺陷:在并發(fā)標記階段的時候,因為用戶線程與GC線程同時運行粘都,有可能會產(chǎn)生多標或者漏標廓推;
多標--多標記(浮動垃圾)
漏標--漏標記

浮動垃圾

1.并發(fā)標記:用戶與GC線程同時運行,假設現(xiàn)在掃描到C對象翩隧,B對象變?yōu)楹谏梗脩艟€程執(zhí)行C的屬性E=null,GC線程掃描C對象引用鏈,認為E對象是為可達對象堆生,但是C對象根本沒有引入到E對象专缠,E對象應該是為垃圾對象,這種問題淑仆,可以在重新標記階段(修正)修復涝婉。
2.并發(fā)清除階段:用戶與GC線程同時運行,會產(chǎn)生新的對象但是沒有及時被GC清理蔗怠。 只能在下一次GC清理垃圾的修復墩弯。

漏標問題

1.用戶線程先執(zhí)行C的E屬性=null;GC線程的GcRoot就掃描不到E寞射。Gc就認為E對象就是為垃圾對象渔工,不可達對象。
2.用戶線有執(zhí)行B.E屬性=E桥温;E對象就是應該是為可達對象引矩。
3.因為GCRoot是從C開始,不會從黑色的B開始侵浸,就會導致漏標的情況發(fā)生旺韭。

漏標的問題滿足兩個條件:
1.至少有一個黑色對象指向了白色對象
2.所有灰色對象掃描完整個鏈時,刪除之前所有白色對象掏觉。

1.CMS如何解決漏標問題---寫屏障+增量更新方式

滿足一個條件(灰色對象與白色對象斷開連接)茂翔,在并發(fā)標記階段當我們黑色對象(B)引用關聯(lián)白色對象(E),記錄下B黑色對象履腋。
在重新標記階段(所有用戶線程暫停),有將B對象變?yōu)榛疑珜ο髮⒄麄€引用鏈全部掃描。
缺點:遍歷B整個鏈的效率非常低遵湖,有可能會導致用戶線程等待的時間非常長悔政。

2.G1如何解決漏標問題---原始快照方式

在C斷開E的時候,會記錄原始快照延旧,在重新標記階段的時候以白色對象變?yōu)榛疑珵槠鹗键c掃描整個鏈谋国,本次GC是不會被清理。
好處:如果假設B(黑色對象)引入該白色對象的時候迁沫,無需做任何遍歷效率是非常高芦瘾。
缺點:如果假設B(黑色對象) 沒有引入該白色對象的時候,該白色對象在本次GC繼續(xù)存活集畅,只能放在下一次GC在做并發(fā)標記的時候清理近弟。
tips:以浮動垃圾(占內存空間)換讓我們用戶線程能夠暫停的時間更加短。

總結:
CMS收集器解決漏標問題:增量方式 如果現(xiàn)在B(黑色)對象引入白色對象挺智,寫屏障祷愉。
好處:避免浮動垃圾,缺點掃描整個引用鏈效率比較低赦颇。
G1收集器解決漏標問題:原始快照方式二鳄。
好處:效率非常高,無需掃描整個引用鏈媒怯,缺點:可能會產(chǎn)生浮動垃圾订讼。


相關文章鏈接:
<<<JVM整體內存結構的圖解,直觀明了
<<<javap命令查看對象信息及操作方法在JVM層的實現(xiàn)原理
<<<javap命令反查匯編指令匯總
<<<ClassLoader類加載器順序Demo測試與雙親委派源碼解讀
<<<自定義SPI和熱部署技術破壞類加載器的雙親委派模式
<<<JVM中對象如何完成空間分配和初始化工作
<<<JVM元空間(方法區(qū))和棧內存溢出原因及解決方案
<<<JVM堆內存溢出和內存泄露問題定位和解決
<<<JVM常見死鎖問題產(chǎn)生原因和多種診斷方式
<<<服務器CPU飆升為100%問題排查及如何避免
<<<JVM內存診斷命令和排查工具匯總
<<<JVM新生代老年代算法匯總圖解
<<<JVM垃圾回收不要手動System.gc的真正原因
<<<JVM垃圾回收引用計數(shù)法和根搜索算法圖解
<<<JVM垃圾回收STW(Stop-The-World)代碼演示
<<<JVM垃圾回收器的發(fā)展歷程及使用場景匯總
<<<JVM串行并行垃圾回收器的關注點
<<<一張圖看懂CMS垃圾回收器的底層原理
<<<G1能作為JDK9默認垃圾回收器的優(yōu)勢分析
<<<GC中新生代進入老年代的方式匯總
<<<GC常用日志參數(shù)配置及分析工具說明
<<<FullGC扇苞、MinorGC欺殿、STW等常見問題如何解答
<<<JVM性能調優(yōu)的評估指標及調優(yōu)示例

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市杨拐,隨后出現(xiàn)的幾起案子祈餐,更是在濱河造成了極大的恐慌,老刑警劉巖哄陶,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帆阳,死亡現(xiàn)場離奇詭異,居然都是意外死亡屋吨,警方通過查閱死者的電腦和手機蜒谤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來至扰,“玉大人鳍徽,你說我怎么就攤上這事「铱危” “怎么了阶祭?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵绷杜,是天一觀的道長。 經(jīng)常有香客問我濒募,道長鞭盟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任瑰剃,我火速辦了婚禮齿诉,結果婚禮上,老公的妹妹穿的比我還像新娘晌姚。我一直安慰自己粤剧,他們只是感情好,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布挥唠。 她就那樣靜靜地躺著抵恋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪猛遍。 梳的紋絲不亂的頭發(fā)上馋记,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天,我揣著相機與錄音懊烤,去河邊找鬼梯醒。 笑死,一個胖子當著我的面吹牛腌紧,可吹牛的內容都是我干的茸习。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼壁肋,長吁一口氣:“原來是場噩夢啊……” “哼号胚!你這毒婦竟也來了?” 一聲冷哼從身側響起浸遗,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤猫胁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后跛锌,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弃秆,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年髓帽,在試婚紗的時候發(fā)現(xiàn)自己被綠了菠赚。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡郑藏,死狀恐怖衡查,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情必盖,我是刑警寧澤拌牲,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布俱饿,位于F島的核電站,受9級特大地震影響们拙,放射性物質發(fā)生泄漏稍途。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一砚婆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧突勇,春花似錦装盯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至定躏,卻和暖如春账磺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背痊远。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工垮抗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人碧聪。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓冒版,卻偏偏與公主長得像,于是被迫代替她去往敵國和親逞姿。 傳聞我的和親對象是個殘疾皇子辞嗡,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內容