2015-07-02 3 views
9

जावा में, वर्ण डेटा प्रकार, char, 2 बाइट्स के साथ दर्शाया गया है। n अक्षरों की संख्या, char[], 2n+24 बाइट्स के साथ दर्शाया गया है।जावा में सरणी के लिए स्मृति उपयोग में ओवरहेड का कारण क्या है?

आम तौर पर, 24 बाइट्स का ओवरहेड n ऑब्जेक्ट्स (कम से कम यदि ऑब्जेक्ट्स आदिम प्रकार के होते हैं) को संग्रहीत करने के लिए ओवरहेड होता है।

हमें इन अतिरिक्त 24 बाइटों की आवश्यकता क्यों है? उनका उपयोग कैसे किया जाता है?

संपादित करें (जुलाई 2 9 2015) यह टिप्पणी में मेरे ध्यान में लाया गया था कि इस प्रश्न का उत्तर प्रोग्रामर StackExchange पर here प्रदान किया गया है।

+3

उत्तर [यहां] (http://programmers.stackexchange.com/questions/162546/why-the-overhead-when-allocating-objects-arrays-in-java) –

+1

शायद सरणी की लंबाई जा रही है इसका हिस्सा बनने के लिए (जो जावा को दुर्घटना से सरणी के बाद जंक में पढ़ने की इजाजत नहीं देता है - दिल से बग किसी को भी?) –

उत्तर

3

यह ऑब्जेक्ट हेडर है, इसमें ऑब्जेक्ट के बारे में जानकारी (लॉक बिट्स, जीसी के लिए चिह्नित बिट्स), इसकी कक्षा वस्तु और लंबाई के लिए एक सूचक शामिल है।

2

ऑब्जेक्ट हेडर और लम्बाई उपसर्ग के अलावा सभी जावा ऑब्जेक्ट्स को भी गठबंधन करना होगा, आमतौर पर पॉइंटर आकारों के लिए, संभावित रूप से इसके गुणक (ऑब्जेक्ट संरेखण को ट्यून करने का विकल्प होता है)।

संरेखण की आवश्यकता का मतलब है कि प्रत्येक ऑब्जेक्ट का पैडिंग अंत होना चाहिए - और इस प्रकार सरणी - यदि बाद की वस्तु ठीक से संरेखित नहीं होती है। यह चिंता byte[] सरणी के साथ सबसे प्रमुख होगी।

संबंधित मुद्दे