我想用盡可能小的空間將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
已知時間在彼此的一定範圍內嗎?你可以扔掉每個「長」的高字節而不會丟失信息嗎? –