मैं न्यूनतम स्थान संभव के साथ स्मृति में 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()
सही है?
- bitSet
के आकार के बारे में जानने के लिए मैं memory-measurer का उपयोग कर रहा हूं, लेकिन यह मुझे 48 bytes
बताता है, यह (41/8) byte
क्यों नहीं है?
मैं उलझन में
64 बिट्स (संभवतः एक 'लम्बा') में अनुमानित ऑब्जेक्ट लेआउट प्राप्त कर सकते हैं बिट्ससेट की बिट्स की संख्या है जो वास्तव में आपके डेटा को पकड़ने के लिए उपयोग में होती है। (यह 41 बिट आवंटित नहीं कर सकता है।) – aioobe
क्या समय एक दूसरे की एक निश्चित सीमा के भीतर जाना जाता है? क्या आप सूचना खोने के बिना प्रत्येक 'लम्बे' के ऊंचे बाइट फेंक सकते हैं? –