GC

三色標記法

白灰黑

初始時棠枉,所有對象都為白色设褐,

GC開始颠蕴,開啟SWT,遍歷堆棧root助析,將直接可達的對象標記為灰色犀被,

遍歷灰色結點,將直接可達的對象標記為灰色,自身標記為黑色外冀,

繼續(xù)執(zhí)行第三步同樣的步驟寡键,直到所有能夠訪問到的結點都被標記為黑色,

關閉SWT雪隧,回收所有白色標記的對象西轩。

如果沒有SWT员舵,程序正常執(zhí)行,可能會有如下的情況遭商,導致對象被誤當作垃圾回收固灵。

白色對象本來被一個灰色對象引用,但是該灰色對象將該引用賦給了黑色對象劫流,灰對白的引用斷開。此時丛忆,由于不會對黑色對象的引用進行檢測標記祠汇,即該白色節(jié)點即使被引用也無法被標記為灰色,最終當作垃圾處理掉熄诡。

三色標記法出現(xiàn)對象丟失可很,要滿足以下兩個條件:

條件一:白色對象被黑色對象引用

條件二:灰色對象與白色對象之間的可達關系遭到破壞

只要破壞兩個中的任何一個不會導致對象丟失的發(fā)生。

兩種不變式

如何破壞兩個條件

強不變式:?不允許黑色對象引用白色對象

弱不變式:?黑色對象可以引用白色對象凰浮,但是白色對象必須直接或間接被灰色對象引用我抠。(保證白色對象一定會被掃描到)

go對上述規(guī)則的兩種實現(xiàn)機制:

插入寫屏障

當一個對象引用另外一個對象時,將另外一個對象標記為灰色袜茧。

插入屏障僅會在堆內存中生效菜拓,不對棧內存空間生效,這是因為go在并發(fā)運行時笛厦,大部分的操作都發(fā)生在棧上纳鼎,函數(shù)調用會非常頻繁。數(shù)十萬goroutine的棧都進行屏障保護自然會有性能問題裳凸。

如果一個棧對象 黑色引用白色對象贱鄙,白色對象依然會被當作垃圾回收。

因此姨谷,最后還需要對棧內存 進行STW逗宁,重新rescan,確保所有引用的被引用的棧對象都不會被回收梦湘。

刪除寫屏障

當一個白色對象被另外一個對象時解除引用時瞎颗,將該被引用對象標記為灰色(白色對象被保護

缺點:產生內存冗余,如果上述該白色對象沒有被別的對象引用践叠,相當于還是垃圾言缤,但是這一輪垃圾回收并沒有處理掉他。

混合寫屏障法

GC剛開始的時候禁灼,會將棧上的可達對象全部標記為黑色管挟。

GC期間,任何在棧上新創(chuàng)建的對象弄捕,均為黑色僻孝。

將棧上的可達對象全部標黑导帝,最后無需對棧進行STW,就可以保證棧上的對象不會丟失

堆上被刪除的對象標記為灰色

堆上新添加的對象標記為灰色

總結

go 1.3 之前采用標記清除法穿铆,需要STW

go 1.5 采用三色標記法您单,插入寫屏障機制(只在堆內存中生效),最后仍需對棧內存進行STW

go 1.8 采用混合寫屏障機制荞雏,屏障限制只在堆內存中生效虐秦。避免了最后節(jié)點對棧進行STW的問題,提升了GC效率

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末凤优,一起剝皮案震驚了整個濱河市悦陋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌筑辨,老刑警劉巖俺驶,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異棍辕,居然都是意外死亡暮现,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門楚昭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來栖袋,“玉大人,你說我怎么就攤上這事哪替《拜” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵凭舶,是天一觀的道長晌块。 經常有香客問我,道長帅霜,這世上最難降的妖魔是什么匆背? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮身冀,結果婚禮上钝尸,老公的妹妹穿的比我還像新娘。我一直安慰自己搂根,他們只是感情好珍促,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著剩愧,像睡著了一般猪叙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天穴翩,我揣著相機與錄音犬第,去河邊找鬼。 笑死芒帕,一個胖子當著我的面吹牛歉嗓,可吹牛的內容都是我干的。 我是一名探鬼主播背蟆,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鉴分,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了带膀?” 一聲冷哼從身側響起冠场,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎本砰,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钢悲,經...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡点额,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了莺琳。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片还棱。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖惭等,靈堂內的尸體忽然破棺而出珍手,到底是詐尸還是另有隱情,我是刑警寧澤辞做,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布琳要,位于F島的核電站,受9級特大地震影響秤茅,放射性物質發(fā)生泄漏稚补。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一框喳、第九天 我趴在偏房一處隱蔽的房頂上張望课幕。 院中可真熱鬧,春花似錦五垮、人聲如沸乍惊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽润绎。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間凡橱,已是汗流浹背小作。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留稼钩,地道東北人顾稀。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像坝撑,于是被迫代替她去往敵國和親静秆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內容