jvm 垃圾回收三色標記

java垃圾回收目前采用的算法是可達性標記算法驯妄,即基于gc root進行可達性分析。分析標記過程采用三色標記法捡遍。

三色標記按照垃圾回收器 ”是否訪問過“ 為條件將對象標為三種顏色(邏輯概念)

白色:表示對象未被垃圾回收器訪問過碴卧;

灰色:表示對象本身被垃圾回收器訪問過攻旦,但這個對象上只少有一個引用未被訪問掃描過

黑色:對象完全被掃描,并且其所有引用都已完成掃描冕房。

其實灰色就是一個過渡狀態(tài)躏啰,在垃圾回收器標記完成結(jié)束后,對象只有白色或者黑色其中一種狀態(tài)耙册,當(dāng)為白色時给僵,說明該對象在可達性分析后沒有引用,也就是之后被銷毀的對象。當(dāng)為黑色時帝际,說明當(dāng)前對象為此次垃圾回收存活對象蔓同。

當(dāng)垃圾回收開始時,gcroot對象是黑色對象蹲诀。沿著他找到的對象A首先是灰色對象斑粱,當(dāng)對象A所有引用都掃描后,對象A為黑色對象脯爪,以此類推繼續(xù)往下掃描则北。

這是垃圾回收標記基本操作。

但目前的垃圾回收是并發(fā)操作的痕慢,就是在你進行標記的時候尚揣,程序線程也是繼續(xù)運行的,那原有的對象引用就有可能發(fā)生變化掖举。

比如已經(jīng)標記為黑色(存活對象)對象惑艇,程序運行將其所有引用取消,那么這個對象應(yīng)該是白色的(垃圾對象)拇泛。這種情況相對好一些滨巴,在下一次垃圾回收時候,我們還是可以把他回收俺叭,只是讓他多活了一會兒恭取,系統(tǒng)也不會出現(xiàn)什么問題,可以不解決熄守。

當(dāng)已經(jīng)標記為白色對象(垃圾對象)時蜈垮,此時程序運行又讓他和其他黑色(存活)對象產(chǎn)生引用,那么該對象最終也應(yīng)該是黑色(存活)對象裕照,如果此時垃圾回收器標記完回收后攒发,會出現(xiàn)對象丟失,這樣就引起程序問題晋南。

出現(xiàn)對象丟失的必要條件是(在垃圾回收器標記進行時出現(xiàn)的改變):

1.重新建立了一條或多條黑色對象到白色對象的新引用惠猿。

2.刪除了灰色對象到白色對象的直接或間接引用

因為已經(jīng)標記黑色的對象說明此輪垃圾回收中垃圾回收器對其的掃描已經(jīng)完成,不會再掃描负间,如果他又引用了一個白色對象偶妖,而且這個白色對象在垃圾掃描完后還是白色,那么這個白色對象最終會被誤回收政溃。

為了防止這種情況的出現(xiàn)趾访,上邊說的必要條件中的一個處理掉即可避免對象誤刪除;

當(dāng)黑色對象直接引用了一個白色對象后董虱,我們就將這個黑色對象記錄下來扼鞋,在掃描完成后,重新對這個黑色對象掃描,這個就是增量更新(Incremental Update)

當(dāng)刪除了灰色對象到白色對象的直接或間接引用后,就將這個灰色對象記錄下來云头,再以此灰色對象為根捐友,重新掃描一次。這個就是原始快照(Snapshot At TheBeginning盘寡,SATB)

自此,對象可達標記完成撮慨。

最后編輯于
?著作權(quán)歸作者所有,轉(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é)果婚禮上,老公的妹妹穿的比我還像新娘屯蹦。我一直安慰自己诸衔,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布颇玷。 她就那樣靜靜地躺著笨农,像睡著了一般。 火紅的嫁衣襯著肌膚如雪帖渠。 梳的紋絲不亂的頭發(fā)上谒亦,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天,我揣著相機與錄音,去河邊找鬼份招。 笑死切揭,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的锁摔。 我是一名探鬼主播廓旬,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼谐腰!你這毒婦竟也來了孕豹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤十气,失蹤者是張志新(化名)和其女友劉穎励背,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體砸西,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡叶眉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了芹枷。 大學(xué)時的朋友給我發(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
  • 正文 我出身青樓,卻偏偏與公主長得像芋浮,于是被迫代替她去往敵國和親抱环。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,834評論 2 345

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