spanClass中的noscan属性

spanClass中的noscan属性

spanClass中的noscan属性 #

spanClass 的 ID 中还会通过最后一位来存放 noscan 的属性。这个标志位是用来告诉 Collector 该 span 中是否需要扫描。如果当前 span 中并不存放任何堆上的指针,就意味着 Collector 不需要扫描这段 span 区间。

type spanClass uint8
func makeSpanClass(sizeclass uint8, noscan bool) spanClass {
    return spanClass(sizeclass<<1) | spanClass(bool2int(noscan))
}
func (sc spanClass) sizeclass() int8 {
    return int8(sc >> 1)
}
func (sc spanClass) noscan() bool {
    return sc&1 != 0
}

spanClass其实是uint8,最低位用来表示noscan。

Viewpoint #

From #

24 | GC实例:Python和Go的内存管理机制是怎样的?