2010-05-13 16 views
5

जब भी कोई वर्ग लोड होता है, ढेर में क्या संग्रहित होता है और ढेर में क्या संग्रहीत किया जाता है?जेवीएम - हीप और स्टैक

धागे कहाँ रहते हैं?

उत्तर

4

संदर्भ प्रकार ढेर में हैं।

किसी भी आदिम प्रकार के डेटा और ढेर पर मानों के संदर्भ (पैरामीटर/विधि के स्थानीय चर) ढेर पर हैं।

प्रत्येक धागे का अपना ढेर होता है।

एप्लिकेशन में सभी थ्रेड एक ही ढेर साझा करते हैं।

+0

@ निर्मल: यह कुछ भी अजीब नहीं है। यह सभी रनटाइमों में एक ही व्यवहार है, चाहे वह सी/सी ++ रनटाइम हो या अन्यथा। तो, मैं वास्तव में आपकी तरफ से "क्यों" क्यों नहीं समझता :) –

+1

"किसी भी आदिम प्रकार के डेटा ... ढेर पर हैं" थोड़ा उलझन में है। ढेर प्राइमेटिव स्टोर करता है अगर वे ऑब्जेक्ट्स के डेटा सदस्य हैं। –

+0

हां। यह करता है .. लेकिन फिर, जैसा कि आपने कंपोजिट्स के हिस्से के रूप में उल्लेख किया है। हालांकि, जिस क्षण हम डेटा तक पहुंचते हैं, इसकी पहली बार स्टैक पर प्रतिलिपि बनाई जाती है। उदाहरण के लिए, परिभाषा ComplexNumber {फ्लोट असली, फ्लोट काल्पनिक} के साथ एक ऑब्जेक्ट के लिए, एक विधि doWork (ComplexNumber cn} {वापसी cn.real * cn.real + float.imaginary * float।काल्पनिक; } मूल्य वास्तविक/काल्पनिक पहले स्टैक अनलाइन सीएन पर लाए जाते हैं जहां केवल संदर्भ को स्टैक –

3

यह वास्तव में आसान है:

  • वस्तुओं (अर्थात वर्गों के उदाहरण) ढेर पर हमेशाहैं। वे कहीं और नहीं हो सकते हैं
    • फ़ील्ड ऑब्जेक्ट्स का हिस्सा हैं, इसलिए वे ढेर पर भी रहते हैं।
  • स्थानीय चर (विधि/कन्स्ट्रक्टर समेत) पैरामीटर स्टैक पर हैं। वे कहीं और नहीं हो सकते हैं।

नोट स्थानीय चर कर सकते हैं केवल पकड़ संदर्भ ("संकेत") या आदिम मानों। एक स्थानीय चर कभी भी "ऑब्जेक्ट" नहीं रख सकता है।

ध्यान दें कि यह दृश्य जेवीएम विनिर्देश में परिभाषित किया गया है। एक ठोस जेवीएम गैर-ढेर क्षेत्र में ऑब्जेक्ट आवंटित कर सकता है यदि वह चाहता है। उदाहरण के लिए: यदि यह जानता है कि एक नव निर्मित ऑब्जेक्ट कभी भी मौजूदा आमंत्रण से बच नहीं जाता है, तो स्टैक क्षेत्र में तत्काल ऑब्जेक्ट डाल सकता है। हालांकि, यह एक बहुत ही अनुकूलन है जो डेवलपर को दिखाई नहीं दे रहा है।

0

प्रिमिटिव: स्टैक

वस्तुओं: ढेर

धागे: एक ही ढेर का हिस्सा है, जबकि एक अलग ढेर है।

+0

प्राथमिकताएं ढेर पर संग्रहीत नहीं हैं यदि वे आवृत्ति चर हैं? और ढेर पर यदि वे स्थानीय चर हैं? – Mike

0

@Joachim सौएर

आप क्या कहते हैं सच है, तो क्यों है, तो निम्न कोड में,

class Student{ 

    int age;    //instance variable 
    String name;  //instance variable 

     public Student() 
    { 
    this.age = 0; //local variable and member of an object 
    name = "Anonymous"; 
    } 

तब क्यों नहीं 'नाम = "बेनामी" है; 'एक स्थानीय चर ?? यह किस प्रकार का चर है और यह कहां रहता है?

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