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