chenghanpeng / jdk11u

《新一代垃圾回收器ZGC设计与实现》一书参考的代码
GNU General Public License v2.0
33 stars 13 forks source link

请教一下,关于ZGC读屏障的部分,应该作何理解? #4

Open xiaoyingzhi opened 3 years ago

xiaoyingzhi commented 3 years ago

看了作者大大的书籍,首先收获良多,首先在这里表示感谢!

然后自己有一点思考,可能是我理解的有问题,怎么也想不通,希望能得到作者的解答,万分感谢!

无法联系到作者,于是通过提issue的方式问问题,在这里说声抱歉!

问题

如何判断bad color和good color? image

网上资料: 网上的资料都说是通过4位颜色指针判断是否是bad color的,意思是这4位颜色指针都是0的情况下就是good color,其余情况下是bad color image

我的理解

但是按照我的理解这4个颜色标志位不可能同时为0.
因为ZGC初始化之后,就会将全局视图设置为Remapped,后续的标记和转移,也会不停的在M视图和Remapped视图切换。 在Remapped视图创建对象,对象的地址视图就会被设置成Remapped 在M视图创建对象,对象的地址视图就会被设置成M 那么,哪来的0000呢?所以用判断对象的地址视图是不是0000来判断是不是good color行不通。

作者书籍:

在作者的书籍中,我翻阅了几遍,作者提到“判断该视图是否在当前视图中”,请问这句话应该如何理解? image