JVM

2015-06-15 7 views
11

में उनके संग्रहण के संदर्भ में अमूर्त वर्ग और इंटरफ़ेस के बीच क्या अंतर है JVM में उनके संग्रहण के संदर्भ में अमूर्त वर्ग और इंटरफ़ेस के बीच क्या अंतर है। अधिक सटीक होने के लिए JVM स्टोर अपनी स्मृति में कहां इंटरफेस करता है?JVM

+0

ढेर, क्योंकि इंटरफेस केवल कक्षाओं में कार्यान्वयन के रूप में मौजूद हैं और वे ढेर पर हैं। – Hiru

+1

क्या यह पूरी तरह से जानकारीपूर्ण है या आप कुछ हासिल करने की कोशिश कर रहे हैं? –

+0

यह जेवीएम पर निर्भर करता है क्योंकि जेवीएम चश्मा यह नहीं कहता कि स्मृति कैसे व्यवस्थित की जानी चाहिए ... – assylias

उत्तर

7

चेतावनी: जैसा कि @ वासिलियास द्वारा उल्लेख किया गया था, यह यांत्रिकी ओरेकल हॉटस्पॉट जेवीएम के लिए विशिष्ट है।

Java8

से पहले सभी मेटा जानकारी PermGen में संग्रहीत किया जाता है, दोनों सार वर्गों और इंटरफेस के लिए। मेटा जानकारी में केवल वर्ग विशिष्ट जानकारी शामिल है (इसमें कौन से फ़ील्ड हैं, माता-पिता क्या हैं, आदि)।

इंटरफ़ेस में केवल public static final फ़ील्ड हो सकते हैं, इसलिए इस फ़ील्ड मेटा की जानकारी PermGen में संग्रहीत की जाती है।

सार कक्षा में स्थैतिक और गैर स्थैतिक दोनों क्षेत्र हो सकते हैं। हालांकि, मेटा की जानकारी के मामले में कोई अंतर नहीं है, इसलिए यह भी पर्मजेन में संग्रहीत है। दूसरी ओर, वास्तविक वस्तु उदाहरण स्थिर और गैर स्थैतिक दोनों क्षेत्रों के लिए हीप में संग्रहीत किए जाते हैं।

उदाहरण देखें

public class MyClass { 
    public static final Calendar calendar = Calendar.getInstance(); 
    private Date myDate = new Date(); 
} 

फील्ड जानकारी के बारे में calendar और myDate PermGen में संग्रहीत किया जाता है और वास्तविक वस्तु उदाहरणों ढेर में संग्रहीत हैं।

में Java8 PermGen ढेर अंतरिक्ष के अंदर ले जाया गया था, Metaspace तथाकथित में है, तो आप java.lang.OutOfMemoryError: PermGen space अब और नहीं देख सकेंगे। हालांकि, मेटा सूचना और ऑब्जेक्ट आवंटन स्मृति के बीच वैचारिक अलगाव अभी भी मौजूद है।

भी @AlexTaylor विनिर्देश उद्धरण की समीक्षा करें।

+0

टिप्पणी के रूप में, यह जेवीएम निर्भर है - उदाहरण के लिए, आप जो कहते हैं वह होस्टस्पॉट/जावा 8 के लिए सही नहीं हो सकता है क्योंकि अब कोई परमजन नहीं है ... – assylias

+0

हॉटस्पॉट JVM के लिए अभी भी विशिष्ट है। – assylias

6

method area (तार्किक ढेर का हिस्सा) वर्गों और JVM में इंटरफेस के बारे में जानकारी का एक बहुत संग्रहीत करता है:

... इस तरह के लगातार पूल चलाने के समय, क्षेत्र के रूप में भंडार प्रति वर्ग संरचना और विधि डेटा, और विधियों और रचनाकारों के लिए कोड, सहित विशेष विधियों (§2.9) कक्षा और उदाहरण प्रारंभिक और इंटरफेस प्रारंभिक में उपयोग किया जाता है।

हालांकि

:

इस विनिर्देशन विधि क्षेत्र या संकलित कोड के प्रबंधन में इस्तेमाल की नीतियों के स्थान जनादेश नहीं है।

जिसका अर्थ है कि एक विशेष जेवीएम जहां भी इसे पसंद करता है उन्हें स्टोर करने के लिए स्वतंत्र है।