gc機制
- 引用計數法
- 三色標記法
目標是爲了縮短STW(stop the world)時間,提高程序時序性。
引用計數法基本原理
內存小於32kb
有使用引用時 計數+1
釋放、置nil計數-1
當引用計數0時,垃圾回收工作。回收內存
三色標記法基本原理
內存大於32kb
- 掃描與標記階段
起初所有對象都是白色
掃描找出所有可達對象,標記爲灰色,放入待處理隊列
從隊列提取灰色對象,將其所有引用對象標記爲灰色放入隊列,自身標記爲黑色
直到所有灰色變成黑色。
寫屏障監視對象內存的修改,重新標色。
- 清理階段
此時只剩下白色和黑色對象,將白色對象的內存收回。將所有黑色對象變爲白色對象,完畢。
注意點
寫屏障
gc運行的過程中,可以監控內存中對象的修改,並對對象進行重新標記
對象
白色:待清理對象
灰色:標記的中間狀態,是可達的
黑色:活躍對象,其引用對象都是灰色或黑色