[英]BitSet memory usage in Scala
我想知道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中的实际元素数量不会影响分配的内存大小。
对于您给出的两个示例,使用8个字节的内存只需要一个Long元素来存储数字,因为在两个示例中,最高数字小于64。
存储任意五个数字的Ints数组将消耗5 * 4字节= 20字节加上开销。 要存储n个数字,您需要大约n * 4个字节。
因此,您将(highestNumberStored / 8)字节与(countOfNumbersStored * 4)字节进行比较。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.