2015-05-16 9 views
10

के साथ जावा सरणी प्रारंभिक जावा में एक सरणी घोषित करते समय हमें नए कीवर्ड का उपयोग करके स्मृति को गतिशील रूप से आवंटित करना होगा।शून्य आकार

class array 
{ 
    public static void main(String ars[]) { 
    int A[] = new int[10]; 
    System.out.println(A.length); 
    } 
} 

ऊपर कोड एक 1 डी सरणी बना देगा जिसमें 10 तत्व, 4 बाइट प्रत्येक होंगे। और आउटपुट 10 होगा। लेकिन आप निम्नलिखित रूप में एक ही कोड चलाने जब:

class array { 
    public static void main(String ars[]) { 
    int A[] = new int[0]; 
    System.out.println(A.length); 
    } 
} 

आउटपुट 0. मुझे पता है कि जब आप new int[0] लिखना तो जावा सरणी के लिए कुछ स्मृति को आबंटित या नहीं करना चाहती है? यदि हां कितना?

उत्तर

10

हां, यह कुछ स्मृति आवंटित करता है, लेकिन राशि JVM कार्यान्वयन के आधार पर भिन्न होती है। आप किसी भी तरह का प्रतिनिधित्व करने की जरूरत है:

  1. एक अनूठा सूचक (! तो सरणी है कि = हर दूसरे नए int [0]), तो कम से कम 1 बाइट
  2. कक्षा सूचक (Object.getClass के लिए()) (System.identityHashCode के लिए)
  3. वस्तु मॉनिटर (सिंक्रनाइज़ (वस्तु) के लिए)
  4. सरणी लंबाई

JVM विभिन्न ऑप्टिमाइज़ेशन करते हैं हो सकता है (टी निकाले जाते हैं

  • हैश कोड वह ऑब्जेक्ट पॉइंटर से सिस्टम हैश कोड अगर यह जीसी'एड/स्थानांतरित नहीं किया गया है, तो कभी-कभी लॉक ऑब्जेक्ट का प्रतिनिधित्व करने के लिए एक बिट का उपयोग करें, खाली सरणी का प्रतिनिधित्व करने के लिए एक बिट का उपयोग करें, आदि), लेकिन यह अभी भी है कुछ स्मृति आवंटित करने के लिए।

    संपादित करें: उदाहरण के लिए, this post पर दिए गए चरणों का पालन करते हुए, मेरा जेवीएम new int[4] के लिए new int[0] बनाम 32 के लिए 16 का आकार दिखाता है।

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