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的内存管理机制是怎样的?