2013-10-12 8 views
5

जेवीएम इन क्षेत्रों को स्मृति में आवंटित करता है: कक्षा (विधि) क्षेत्र, ढेर, ढेर, कार्यक्रम काउंटर रजिस्टर, मूल विधि ढेर।कक्षा क्षेत्र और ढेर के बीच अंतर

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

क्या कोई भी कक्षा क्षेत्र और हीप के बीच अंतर को समझा सकता है?

+1

कक्षाओं के बारे में सभी मेटा-डेटा स्टोर करने के लिए एक जगह होने की आवश्यकता है। ये आपके आवेदन में डेटा नहीं हैं, लेकिन उन्हें सभी को संग्रहीत करने की आवश्यकता है। – Aaron

उत्तर

9

जावा 6 दुकानों सभी निरंतर पूल और पेर्म जनरल

जावा 7 में कक्षा जानकारी केवल पेर्म जनरल में कक्षा की जानकारी स्ट्रिंग शाब्दिक पूल ढेर पर है संग्रहीत करता है।

जावा 8 में कोई पर्म जनरल नहीं है। शाब्दिक पूल और कक्षा की जानकारी ढेर पर है।

आपने अंतर समझाया है। विधियों की तरह कक्षा संरचनाओं को परम जीन में संग्रहीत किया जाता है। प्रत्येक उदाहरण में डेटा ढेर में संग्रहीत किया जाता है।

वे अलग-अलग थे क्योंकि इन प्रकार के डेटा में बहुत अलग जीवनशैलीएं होती हैं उदा। ऑब्जेक्ट आमतौर पर कम रहते हैं और कक्षाएं आमतौर पर बहुत लंबे समय तक जीवित होती हैं।

AFAIK वे इसे हटा रहे हैं क्योंकि बहुत से डेवलपर्स ने इसे भ्रमित कर दिया है।

+1

जावा 8 के साथ, यह कहना सुरक्षित है कि वर्ग क्षेत्र की तरह कुछ भी नहीं है क्योंकि कक्षा परिभाषाओं को भी ढेर पर संग्रहीत किया जाता है। –

+1

@ बलकृष्णनगपाल यह कहना सुरक्षित है कि मेटास्पेस हमें सिर्फ पर्म हेन की तरह है लेकिन एक अलग नाम के साथ और अलग-अलग ट्यून किया गया है। यह वही काम करता है। ढेर पर कोई कोड नहीं है। –

3

कक्षा (विधि) क्षेत्र कोड स्टोर करता है - यह आपके प्रोग्राम का कोड है। ढेर भंडारण ऑब्जेक्ट उदाहरण। उदाहरण के लिए:

public void MakeSomeFruit(){ 

    Fruit myFruit=new Fruit(); 

} 
  • MakeSomeFruit कोड वर्ग क्षेत्र में संग्रहित है।
  • निष्पादित होने पर, वास्तविक फल उदाहरण बनाता है जो हीप में संग्रहीत होता है।
  • निष्पादित होने पर, myFruit संदर्भ चर ढेर पर संग्रहीत किया जाता है। यह सिर्फ एक संख्या है जो स्मृति में उदाहरण के स्थान पर इंगित करती है - एक पता।
संबंधित मुद्दे