美文网首页
BitSet 为啥要选择ADDRESS_BITS_PER_WOR

BitSet 为啥要选择ADDRESS_BITS_PER_WOR

作者: 老鼠抗大枪 | 来源:发表于2019-07-29 15:16 被阅读0次

    通过查看BitSet 源码可以发现其设置ADDRESS_BITS_PER_WORD默认为6.但是为什么呢?

    首先BitSet内置的底层数据为long数组,阅读set(int bitIndex)发现,其首先通过bitIndex >> ADDRESS_BITS_PER_WORD找到wordIndex,然后通过 words[wordIndex] |= (1L << bitIndex); // Restores invariants来设置对应的数值位。

    一个long 8字节,64位。1<<1是2,1<<65也是2.也就是说1右移动64+位就会超过long大小,导致重复。因此ADDRESS_BITS_PER_WORD最多为6。

    假设ADDRESS_BITS_PER_WORD超过6设置为7 ,比如1和65对应的wordIndex都是0,但是1<<1和1<<65同样的值,则set(1)和set(65)冲突。导致问题。

    综上所述由于底层数据结构为long数组,ADDRESS_BITS_PER_WORD最大能够设置为6

    相关文章

      网友评论

          本文标题:BitSet 为啥要选择ADDRESS_BITS_PER_WOR

          本文链接:https://www.haomeiwen.com/subject/baubrctx.html