@lanling_ 這就是最后一個(gè)例子重點(diǎn)說(shuō)明的哈,首先要明白一個(gè)概念,只要一個(gè)對(duì)象的父對(duì)象或者祖父對(duì)象是灰色的,這個(gè)對(duì)象就是安全的。
1. 如果一個(gè)棧被標(biāo)位黑色的(曾經(jīng)有過(guò)一個(gè)瞬間棧對(duì)象所指向的子對(duì)象都被標(biāo)位灰色了),那么就算后面這個(gè)棧的棧對(duì)象指向別的白色對(duì)象a,這個(gè)白色對(duì)象a之前肯定有一個(gè)父節(jié)點(diǎn)或者祖父節(jié)點(diǎn)b是灰色的,所以b 會(huì)保護(hù) a,如果當(dāng)那個(gè)b刪除引用的時(shí)候, shade(*slot)會(huì)把子對(duì)象c或者a變?yōu)榛疑@樣a就是灰色或者被c保護(hù)了
2. 如果這個(gè)棧還是灰色的(里面仍有棧對(duì)象是灰色的)。
2.1 白色對(duì)象被灰色棧對(duì)象指向,就直接是安全的。
2.2 白色對(duì)象a被棧中的黑色對(duì)象指向,因?yàn)闂?duì)象只有在所有指向的對(duì)象都是灰色后才會(huì)標(biāo)黑,所以這種情況的出現(xiàn)只能是在標(biāo)黑之后進(jìn)行指向的操作,那么肯定有一個(gè)別的非黑色對(duì)象b也指向這個(gè)白色對(duì)象a,這個(gè)非黑色的對(duì)象b是灰色的,那么就能直接保護(hù)a,如果其是白色的,那么其肯定被一個(gè)灰色的父或者祖父灰色節(jié)點(diǎn)c所保護(hù),同樣c也會(huì)保護(hù)a。
golang 1.8 gc的演進(jìn)在java的gc中,主要有三種算法,即:標(biāo)記-刪除,標(biāo)記-整理,復(fù)制,網(wǎng)上有很多資料介紹相關(guān)內(nèi)容,其中標(biāo)記主要是為了找到內(nèi)存中不可達(dá)的對(duì)象,并將其回收。而gc過(guò)程中最關(guān)鍵的指...