我想用尽可能小的空间将System.currentTimeInMillis
存储在内存中。因为我必须将数百万个数据存储在内存中。我的Bitset的大小是多少?
我把它转化为binaryString
这给了我41 bits
这里是我的程序
public class BitSetSize {
public static void main(final String[] args) {
final long currentTimeMillis = System.currentTimeMillis();
final String currentTimeToBinaryString = Long.toBinaryString(currentTimeMillis);
System.out.println("Size in bits: " + currentTimeToBinaryString.length());
final BitSet bitSet = BitSet.valueOf(new long[]{currentTimeMillis});
System.out.println("Bitset length: " + bitSet.length());
System.out.println("Bitset size: " + bitSet.size());
System.out.println("Size of biset object(bytes): " + MemoryMeasurer.measureBytes(bitSet));
}
}
但是当我运行它,我得到
Size in bits: 41
Bitset length: 41
Bitset size: 64
Size of biset object(bytes): 48
问题
- 为什么bitSet.length()
和bitSet.size()
有何不同?我认为length()
是正确的?
- 我正在使用memory-measurer了解bitSet
的大小,但它告诉我48 bytes
,为什么不是(41/8) byte
?
我的BitSet困惑
64位(可能是'long')是实际用来保存数据的BitSet的位数。 (它不能分配41位) – aioobe
已知时间在彼此的一定范围内吗?你可以扔掉每个“长”的高字节而不会丢失信息吗? –