51 Jvm性能優(yōu)化-三色標記算法如何處理漏標問題

1.GC如果想查找到存活的對象癣诱,根據(jù)可達分析算法 根據(jù)GCRoot引用鏈遍歷存活對象。
根據(jù)GCRoot遍歷過程中护赊, 按照是否訪問過該對象 分為三種不同顏色曾沈。

白色:本對象沒有訪問過 (有可能是為垃圾對象)陷谱;
黑色:本對象已經(jīng)被訪問過烙博,且本對象的所有屬性都被訪問過;
灰色:本對象已經(jīng)被訪問過烟逊,且本對象的所有屬性沒有訪問過渣窜;本對象所有屬性都訪問過后,本對象有灰色變?yōu)楹谏?/p>

原理:
1.初始時宪躯,所有對象都在白色容器中乔宿;
2.當收集器在做初始標記的時候,會暫停所有的用戶線程访雪,標記GCRoot關聯(lián)的直接對象A和B详瑞;
放入到灰色盒子中。
3.在并發(fā)標記中(用戶線程與GC線程同時運行)臣缀,將本對象引用到其他對象移動灰色容器中坝橡,如果
該對象沒有引用到其他對象或者其他對象已經(jīng)標記過,則該對象放到黑色容器中精置。
4.重復以上這些操作计寇,到灰色容器為空時,則停止脂倦。
5.結(jié)束后番宁,如果在白色容器中任然存在的對象,則認為就是與GCRoot沒有直接關聯(lián)赖阻,則認為就是為不可達對象蝶押,
可以被垃圾回收線程清理。

三色標記算法:在并發(fā)標記中存在的問題火欧,因為用戶線程與GC線程同時運行棋电,有可能存在多標茎截、漏標記問題。

多標-浮動垃圾算法:

1.因為用戶線程與GC線程同時運行离陶,GC線程先執(zhí)行遍歷到C對象稼虎,C對象已經(jīng)存放到灰色容器中,突然用戶線程
修改了B.屬性C=Null招刨,這時候C已經(jīng)是為垃圾對象了,但是C對象已經(jīng)存放到灰色容器中哀军,繼續(xù)向下遍歷沉眶,GC線程
不認為是垃圾對象,這個過程我們可以稱作為浮動垃圾杉适,只能在下一次GC回收的時候清理谎倔。
2.并發(fā)清除時,用戶線程與GC線程同時運行猿推,用戶線程產(chǎn)生的浮動垃圾片习,只能在下一次清理。

漏標問題:

image.png

當遍歷的C對象的時候蹬叭,C對象已經(jīng)存放到灰色容器中藕咏,突然用戶線程修改C對象屬性.E=Null; E對象與C對象斷開,則E
對象為垃圾對象秽五,但是用戶線程修改B對象的屬性=E對象孽查,但是B對象已經(jīng)為黑色不會繼續(xù)遍歷,就會導致E對象會被垃圾線程
清理坦喘,這個過程稱作為漏標問題盲再。
D.屬性E=null;B.屬性E=E瓣铣;
漏標的問題滿足兩個條件:
1.至少有一個黑色對象指向了白色對象
2.所有灰色對象掃描完整個鏈時答朋,刪除之前所有白色對象。

漏標解決方案:

CMS收集器中處理漏標問題(增量更新):
滿足了第一個條件(灰色對象不在關聯(lián)白色對象的時候)棠笑,當黑色對象關聯(lián)該白色對象的時候會記錄該黑色對象梦碗,
在重新標記的時候,以該黑色對象變?yōu)榛疑溃瑥男麻_始修正標記叉弦,但是這種方案能夠確保垃圾都被清理,缺點就是效率非常低藻糖,
因為會掃描到整個黑色對象所有引用淹冰。

G1收集器中處理漏標問題(原始快照SATB):
滿足了第一個條件(灰色對象不在關聯(lián)白色對象的時候),記錄該白色對象變?yōu)榛疑奁猓谥匦聵擞浀臅r候掃描該白色對象整個引用鏈樱拴,但是如果黑色對象沒有引用該白色對象的時候柠衍,這時候就會產(chǎn)生浮動垃圾,只能在下一次清理晶乔。
相對于來說原始快照方式比增量更新方式容易產(chǎn)生浮動垃圾珍坊,但是效率比增量更新要高。

七種收集器總結(jié)
SerialGC 串行收集器 復制算法 新生代 響應速度快 適合單核的客戶端應用程序下正罢。
ParNew 并行收集器 復制算法 新生代 響應速度快 適合多核的cpu情況下 默認與cms配合使用
Parallel 并行收集器 復制算法 新生代 吞吐量優(yōu)先 適合于后端多核cpu情況下 堆內(nèi)存不是很大
SerialGCOld 串行收集器 標記整理算法 老年代響應速度快 適合單核的客戶端應用程序下阵漏。
Parallel old 并行收集器 標記整理算法 老年代 老年代吞吐量優(yōu)先 適合于后端多核cpu情況下 堆內(nèi)存不是很大
CMS 收集器并發(fā)收集器 標記清除 老年代 響應速度快 適合于企業(yè)級B/S項目
G1收集器 并發(fā)收集器 標記整理算法/復制算法 響應速度優(yōu)先 適合于大型服務器端

image.png
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(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
  • 正文 為了忘掉前任铅檩,我火速辦了婚禮,結(jié)果婚禮上莽鸿,老公的妹妹穿的比我還像新娘昧旨。我一直安慰自己,他們只是感情好祥得,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布兔沃。 她就那樣靜靜地躺著,像睡著了一般级及。 火紅的嫁衣襯著肌膚如雪乒疏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天饮焦,我揣著相機與錄音怕吴,去河邊找鬼窍侧。 笑死,一個胖子當著我的面吹牛转绷,可吹牛的內(nèi)容都是我干的伟件。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼议经,長吁一口氣:“原來是場噩夢啊……” “哼斧账!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起煞肾,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤其骄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后扯旷,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡索抓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年钧忽,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逼肯。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡耸黑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出篮幢,到底是詐尸還是另有隱情大刊,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布三椿,位于F島的核電站缺菌,受9級特大地震影響,放射性物質(zhì)發(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

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