एक वस्तु सरणी के calculate स्मृति आकार, कोड निम्नलिखित देता है "24 बाइट्स इस्तेमाल किया" अपेक्षा के अनुरूप है, जो, जहाँ तक मुझे पता है, के होते हैं:जावा वस्तु सरणी आकार
4bytes(element pointer)+16bytes(object header)+4bytes(element space) = 24bytes
// with JVM argument -XX:-UseTLAB
public static void main(String[] args) {
long size = memoryUsed();
Object[] o = new Object[]{1};
//Object[] o = new Object[]{1L};
size = memoryUsed() - size;
System.out.printf("used %,d bytes%n", size);
//Output: used 24 bytes
}
public static long memoryUsed() {
return Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
}
लेकिन जब तत्व का प्रकार लांग (1 एल) में बदल गया, तो परिणाम भ्रमित हो रहा है, अधिकांश समय यह "9,264 बाइट्स" का उपयोग करता है, कोई भी मुझे प्रबुद्ध करने में मदद कर सकता है? इस दो तत्व प्रकार के बीच स्मृति आवंटन में क्या अंतर है?
// with JVM argument -XX:-UseTLAB
public static void main(String[] args) {
long size = memoryUsed();
//Object[] o = new Object[]{1};
Object[] o = new Object[]{1L};
size = memoryUsed() - size;
System.out.printf("used %,d bytes%n", size);
//Output: used 9,264 bytes
}
शायद दूसरी सरणी बनाने के लिए जेवीएम को अतिरिक्त कक्षाएं लोड करना पड़ता है (जैसे 'लांग' और इसकी आंतरिक कक्षा 'लांग। लोंग कैश') जो आपकी अपेक्षा से अधिक मेमोरी का उपभोग करती है। –
[जावा में, किसी ऑब्जेक्ट के आकार को निर्धारित करने का सबसे अच्छा तरीका क्या है?] (Https://stackoverflow.com/questions/52353/in-java-what-is-the-best-way-to के संभावित डुप्लिकेट -determine-the-size-of-a-object) –