Desidero memorizzare System.currentTimeInMillis
nella memoria con il minimo spazio possibile. perché devo memorizzarne milioni in memoria.Qual è la dimensione del mio Bitset?
ho convertito a binaryString
che mi ha dato 41 bits
Ecco il mio programma di
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));
}
}
Ma quando l'eseguo ottengo
Size in bits: 41
Bitset length: 41
Bitset size: 64
Size of biset object(bytes): 48
Domanda
- Perché bitSet.length()
e bitSet.size()
differiscono? Presumo che lo length()
sia corretto?
- Sto usando memory-measurer per conoscere le dimensioni di bitSet
, ma mi dice 48 bytes
, perché non è (41/8) byte
?
Sono confuso
64 bit (presumibilmente un 'long') è il numero di bit che il BitSet è effettivamente in uso per contenere i dati. (Non può allocare 41 bit.) – aioobe
I tempi noti si trovano entro un certo intervallo l'uno dall'altro? Potresti buttare via i byte alti di ogni "lungo" senza perdere informazioni? –