2013-10-17 5 views
5

जब मैं कहता हूँ की तरह कुछ:थ्रेड ऑब्जेक्ट कहां बनाया गया है? ढेर या ढेर?

Thread t1 = new Thread(); 

यह एक ढेर या एक ढेर पर यह बनाता है?

+0

"दृश्यमान" भाग JVM ढेर में है। एक चल रहे थ्रेड के लिए, कम से कम, एक ओएस-विशिष्ट भाग जिसे कहीं और आवंटित किया जाता है, लेकिन यह सब स्वचालित रूप से संभाला जाता है। –

उत्तर

7
Thread t1 = new Thread(); 

यह ऑब्जेक्ट i.e. t1 ढेर में आवंटित करता है।

चूंकि प्रत्येक नया धागा अस्तित्व में आता है, इसलिए इसे अपना पीसी रजिस्टर (प्रोग्राम काउंटर) और जावा स्टैक मिलता है। यदि थ्रेड जावा विधि (मूल विधि नहीं) निष्पादित कर रहा है, तो पीसी रजिस्टर का मान निष्पादित करने के लिए अगले निर्देश को इंगित करता है। थ्रेड के जावा स्टैक थ्रेड के लिए जावा (मूल नहीं) विधि आमंत्रण की स्थिति को संग्रहीत करता है। जावा विधि आमंत्रण की स्थिति में its local variables, the parameters with which it was invoked, its return value (यदि कोई हो), and intermediate calculations शामिल है। मूल विधि के आविष्कार की स्थिति देशी विधि के ढेर में कार्यान्वयन-निर्भर तरीके से, साथ ही संभवतः रजिस्ट्रार या अन्य कार्यान्वयन-निर्भर स्मृति क्षेत्रों में संग्रहीत होती है।

जावा स्टैक स्टैक फ्रेम (या फ्रेम) से बना है। एक स्टैक फ्रेम में एक जावा विधि आमंत्रण की स्थिति होती है। जब कोई थ्रेड किसी विधि को आमंत्रित करता है, तो जावा वर्चुअल मशीन उस थ्रेड के जावा स्टैक पर एक नया फ्रेम धक्का देती है। जब विधि पूर्ण हो जाती है, तो वर्चुअल मशीन उस विधि के लिए फ्रेम को पॉप और डिस्कार्ड करती है।

जावा वर्चुअल मशीन में मध्यवर्ती डेटा मान रखने के लिए कोई रजिस्ट्रार नहीं है। निर्देश सेट इंटरमीडिएट डेटा मानों के भंडारण के लिए जावा स्टैक का उपयोग करता है।

चित्र वर्चुअल मशीन इंस्टेंस का एक स्नैपशॉट दिखाता है जिसमें तीन थ्रेड निष्पादित होते हैं। स्नैपशॉट के तुरंत बाद, एक और दो धागे जावा विधियों को निष्पादित कर रहे हैं। थ्रेड तीन मूल विधि निष्पादित कर रहा है। यह स्मृति वर्चुअल मशीनों का भी दिखाता है जो जावा आभासी मशीन प्रत्येक धागे के लिए बनाता है, ये क्षेत्र स्वामित्व वाले धागे के लिए निजी हैं। कोई थ्रेड पीसी रजिस्टर या किसी अन्य थ्रेड के जावा स्टैक तक नहीं पहुंच सकता है।

enter image description here

+0

धन्यवाद @ धन्यवाद! लेकिन मुझे समझा सकता है कि धागे की मूल विधि क्या है? और यह संतृप्ति - "मूल विधि के आविष्कार की स्थिति देशी विधि के ढेर में कार्यान्वयन-निर्भर तरीके से, साथ ही संभवतः रजिस्ट्रार या अन्य कार्यान्वयन-निर्भर स्मृति क्षेत्रों में संग्रहीत होती है।" – Chiran

+1

यदि कोई थ्रेड कुछ मूल ऑपरेशन करता है, तो जेनी सामान। और दूसरे प्रश्न के लिए इसका मतलब है कि थ्रेड और अंतरिक्ष आवंटन के संदर्भ में diff os के विभिन्न कार्यान्वयन हैं। – Trying

+0

हाय, कृपया स्पष्ट करें कि मूल में ओएस लेवल एपीआई कॉल शामिल है या नहीं? जावा I/O में पढ़ने(), लिखने() विधियों के आविष्कार की तरह। –

10

जावा में स्टैक पर ऑब्जेक्ट आवंटित करने का कोई तरीका नहीं है।
ढेर केवल संदर्भ और primitives, और केवल स्थानीय चर के लिए पकड़ सकते हैं।

ध्यान दें कि धागा शुरू करने से उस धागे के लिए एक नया ढेर बन जाएगा।

+2

+1 अधिक विशिष्ट होने के लिए, 'थ्रेड' ऑब्जेक्ट और उसके फ़ील्ड ढेर पर आवंटित किए जाते हैं। नए धागे से जुड़े स्टैक मेमोरी को जेवीएम/ओएस द्वारा आवंटित किया जाता है लेकिन यह ढेर पर _not_ है। यह स्मृति के एक अलग खंड में आवंटित किया जाता है। – Gray

+0

आप स्पष्ट रूप से स्टैक पर ऑब्जेक्ट्स आवंटित नहीं कर सकते हैं, लेकिन यदि JVM पर्याप्त छोटे हैं और वर्तमान थ्रेड से बच नहीं रहे हैं तो JVM ऑप्टिमाइज़ेशन के रूप में स्टैक पर ऑब्जेक्ट आवंटित कर सकता है। इस आलेख को "स्टैक आवंटन" अनुभाग में देखें: http://www.ibm.com/developerworks/java/library/j-jtp09275/index.html – dcernahoschi

+0

नोट: जावा 7/8 ऑब्जेक्ट को स्टैक पर रखने की अनुमति देता है। –

2

जावा 8 में, भागने विश्लेषण वस्तुओं का उपयोग कर ढेर पर बनाया जा सकता है। यह तब होता है जब किसी ऑब्जेक्ट का पता लगाया जाता है क्योंकि वर्तमान विधि से बच नहीं रहा है (इनलाइनिंग के बाद) नोट: यह अनुकूलन जावा 7 में उपलब्ध है, लेकिन मुझे नहीं लगता कि यह भी काम करता है।

हालांकि, जैसे ही आप start() पर कॉल करते हैं, यह वर्तमान विधि से बच जाएगा, इसलिए इसे ढेर पर रखा जाना चाहिए।

जब मैं कहता हूँ की तरह कुछ:

Thread t1 = new Thread(); 

यह एक ढेर या एक ढेर पर यह बनाता है?

यह इसे ढेर पर रख सकता है, बशर्ते आप इसे वास्तविक धागा बनाने के लिए उपयोग न करें। यानी यदि आप

Thread t1 = new Thread(runnable); 
t1.start(); 

इसे इसे ढेर पर रखना है।

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