【发布时间】:2016-01-19 23:34:01
【问题描述】:
我想以尽可能小的空间将System.currentTimeInMillis 存储在内存中。因为我必须在内存中存储数百万个。
我将它转换为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?
我很困惑
【问题讨论】:
-
64 位(可能是
long)是 BitSet 实际用于保存数据的位数。 (它不能分配 41 位。) -
已知的时间是否在一定范围内?你能在不丢失信息的情况下丢弃每个
long的高字节吗?
标签: java memory memory-management data-structures bits