我想知道 Scala 中 BitSet 的内存使用情况是什么。例如,如果我这样做:
var bitArray:BitSet=new BitSet(10)
bitArray.add(0)
bitArray.add(2)
bitArray.add(4)
bitArray.add(6)
bitArray.add(8)
这与包含偶数 0、2、4、6、8 的数组相比如何?
用二进制写一个数字怎么样:
var bitArray:BitSet=new BitSet(32)
bitArray.add(5)
bitArray.add(3)
bitArray.add(2)
bitArray.add(1)
bitArray.add(0)
这与数字 47 相比如何?
我在这里询问内存使用情况。但作为一个更开放的问题,如果您知道,BitSet 的优点/缺点或用途是什么(WR 到其他常见数据类型)。
谢谢,
最佳答案
你可以在这里查看 Scala 2.8 中 BitSet 的实现:scala.collection.mutable.BitSet .
它是基于 Long 数组实现的。数组的大小仅取决于存储在其中的最高数字。将存储在其中的最高数字除以 64,四舍五入,您就得到了数组的大小。数组中的每个元素占用 8 个字节。
这意味着将其中存储的最大数字除以 8,大致得出 BitSet 的字节大小。 “大致”是因为虚拟机内存管理开销,因为指向数组的指针也需要一些内存,并且因为数组本身有一些开销。
插入的顺序或存储在 BitSet 中的实际元素数量对分配的内存大小没有影响。
对于您给出的两个示例,仅需要一个 Long-element 来存储数字,使用 8 字节的内存,因为在两个示例中,最高数字都小于 64。
存储任意五个数字的 Int 数组将消耗 5 * 4 字节 = 20 字节加上开销。要存储 n 个数字,您大约需要 n * 4 个字节。
因此,您将 (highestNumberStored/8) 字节与 (countOfNumbersStored * 4) 字节进行比较。
关于memory - Scala 中的 BitSet 内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3140806/