Java g1 gc写屏障:异或和移位

Java g1 gc写屏障:异或和移位,java,garbage-collection,jvm,jvm-hotspot,g1gc,Java,Garbage Collection,Jvm,Jvm Hotspot,G1gc,我正在阅读《垃圾第一次垃圾收集》(Garbage First Garbage Collection()),在第2.2节中提到了写障碍。为了从同一区域过滤出对象,它有以下代码,当rTmp为0时,表示rX且rY包含来自同一区域的指针 rTmp := rX XOR rY rTmp := rTmp >> LogOfHeapRegionSize 但如果假设LogOfHeapRegionSize为4(bin=100),rX启动地址(bin 0),rY启动地址(bin 111),显然,它们不在同

我正在阅读《垃圾第一次垃圾收集》(Garbage First Garbage Collection()),在第2.2节中提到了写障碍。为了从同一区域过滤出对象,它有以下代码,当
rTmp
为0时,表示
rX
rY
包含来自同一区域的指针

rTmp := rX XOR rY
rTmp := rTmp >> LogOfHeapRegionSize
但如果假设LogOfHeapRegionSize为4(bin=100),rX启动地址(bin 0),rY启动地址(bin 111),显然,它们不在同一区域,但应用上面的代码,我们得到

111 XOR 000 = 111
111 >> 4 = 0

为什么他们在同一个地区?我对代码的理解正确吗?

LogOfHeapRegionSize=4表示区域大小为2⁴=16地址000b(0)和111b(7)都在0-15范围内,因此都属于第一个区域。LogOfHeapRegionSize=4表示区域大小为2⁴=16地址000b(0)和111b(7)都在0-15范围内,因此都属于第一个区域。