我认为
(hash >>> segmentShift) & segmentMask
等于
(hash >>> segmentShift)
例如, ssize是16,sshift是4,所以segmentShift是28,segmentMask是15
hash >>> segmentShift
将得到高4位,当与segmentMask进行&操作时,没有任何改变。
我有什么误解吗?
最佳答案
嗯,我从这里了解到的是整个操作
(hash >>> segmentShift) & segmentMask
用于查找表中段的位置。正如您已经提到的 (hash >>> segmentShift) 用于获取 key 哈希值的前 4 位。
但段掩码的主要作用是将段平均分布在段表数组中。 ConcurrentHashMap中有很多段,为了避免冲突,使用了这个段掩码。 段掩码为[(2的幂)-1]。
这个概念类似于 HashMap,其中 [hash & (length_of_hashmap-1)] 用于查找 hashmap 中键的索引。
hashmap 的长度始终是 2 的幂,在这种情况下,段掩码也是 (2 的幂)-1。
它的工作原理与 hashmap%size 的概念相同,因此索引不会超出 hahsmap 的长度。
关于java - java ConcurrentHashMap中的segmentMask是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16409674/