我想知道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。
它是基于Longs数组实现的。数组的大小仅取决于存储在其中的最大数目。将存储在其中的最高数字除以64,然后四舍五入,就可以得到数组的大小。数组中的每个元素消耗8个字节。
这意味着将其中存储的最大数字除以8,将大致得出BitSet的大小(以字节为单位)。 “大约”是因为虚拟机内存管理开销,因为指向数组的指针也需要一些内存以及因为数组本身也有一些开销。
插入顺序或BitSet中存储的元素的实际数量对分配的内存大小没有影响。
对于您给出的两个示例,只需要一个Long-element即可使用8个字节的内存来存储数字,因为在两个示例中,最大数字均小于64。
一个存储任意五个数字的Ints数组将消耗5 * 4字节= 20字节加上开销。为了存储n个数字,您大约需要n * 4个字节。
因此,您正在将(highestNumberStored/8)个字节与(countOfNumbersStored * 4)个字节进行比较。
关于memory - Scala中的BitSet内存使用情况,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3140806/