有2个问题 想请教Golang 友友们
问题1 : golang v1.8 : 三色标记清除-混合写屏障 中前2条规则 栈空间引用的对象 全部标记为黑色,那么栈空间的对象 再什么时候删除?
问题2 : golang v1.8 : 三色标记清除-混合写屏障 中后2条规则 是只作用于堆空间上? 还是 也会作用于栈空间?
golang v1.8 : 三色标记清除-混合写屏障
具体操作
1、GC开始将栈上的对象全部扫描并标记为黑色(之后不再进行第二次重复扫描,无需STW)
2、GC期间,任何在栈上创建的新对象,均为黑色
3、被删除的对象标记为灰色。
4、被添加的对象标记为灰色。
优点:避免了re-scan,极大的减少了stw的时间
满足条件:变形的弱三色不变式
分析
第一步:相当于栈上的删除写屏障:保证了不会原来被栈引用的栈对象被删除引用后,又被其他栈上对象引用,但是由于没有删除写屏障却被回收
第二步:相当于栈上的插入写屏障:保证了栈上新加对象不会由于没有写入屏障,从而被删除引用的时候被错误回收
第三步:满足删除写屏障
第四步:满足插入写屏障
有疑问加站长微信联系(非本文作者)