जावा में मेमोरी आवंटन क्या है? स्टैक और हीप मेमोरी

'जावा में मेमोरी आवंटन' पर आधारित यह लेख आपको स्टैक और हीप डेटा संरचनाओं के साथ मेमोरी आवंटन के बारे में विस्तृत जानकारी प्रदान करने में मदद करेगा।

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

स्टैक मेमोरी क्या है?

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



ढेर स्मृति को हमेशा संदर्भित किया जाता है LIFO (लास्ट-इन-फर्स्ट-आउट) गण। जब भी कोई विधि लागू की जाती है, तो विधि के लिए स्थानीय प्राइमरी वैल्यूज़ और अन्य ऑब्जेक्ट्स को संदर्भित करने के लिए स्टैक मेमोरी में एक नया ब्लॉक बनाया जाता है।

जैसे ही विधि समाप्त होती है, ब्लॉक अप्रयुक्त हो जाता है और अगली विधि के लिए उपलब्ध हो जाता है।

जावा में यह ऑपरेटर क्या है

ढेर मेमोरी का आकार हीप मेमोरी की तुलना में बहुत कम है।

स्टैक मेमोरी की मुख्य विशेषताएं

हमने अभी तक जो चर्चा की है, उसके अलावा निम्नलिखित कुछ अन्य विशेषताएं हैं ढेर याद:

  • यह बढ़ता है और सिकुड़ता है क्योंकि नए तरीके कहे जाते हैं और क्रमशः लौटते हैं
  • स्टैक के अंदर चर केवल उस विधि के रूप में मौजूद होते हैं जब तक कि उन्हें बनाने की विधि चल रही हो
  • आईटी इस खुद ब खुद जब विधि का निष्पादन समाप्त हो जाता है, तो आवंटित और अस्वीकृत हो जाता है
  • यदि यह मेमोरी भर गई है, तो जावा फेंकता है java.lang.StackOverFlowError
  • इस मेमोरी तक पहुंच है तेज जब ढेर स्मृति की तुलना में
  • यह स्मृति है सुरक्षित धागा जैसा कि प्रत्येक धागा अपने स्वयं के स्टैक में संचालित होता है

स्टैक वर्ग में विधियाँ

  • ऑब्जेक्ट पुश ( वस्तु तत्व ): ढेर के शीर्ष पर एक तत्व को धक्का देता है।
  • ऑब्जेक्ट पॉप (): स्टैक के शीर्ष तत्व को निकालता है और वापस करता है। एक 'EmptyStackException' अपवाद तब फेंका जाता है जब हम पॉप को कॉल करते हैं () जब इनकॉकिंग स्टैक खाली हो।
  • ऑब्जेक्ट झांकना (): स्टैक के शीर्ष पर तत्व देता है, लेकिन इसे हटाता नहीं है।
  • बूलियन खाली (): यदि स्टैक के शीर्ष पर कुछ भी नहीं है तो यह सच है। और, झूठा लौटता है।
  • int खोज ( वस्तु तत्व ): यह निर्धारित करता है कि स्टैक में कोई वस्तु मौजूद है या नहीं। यदि तत्व पाया जाता है, तो यह ढेर के ऊपर से तत्व की स्थिति लौटाता है। और, यह -1 देता है।

स्टैक कार्यान्वयन के लिए जावा कोड

इंपोर्ट java.io. * इंपोर्ट java.util। * क्लास टेस्ट {स्टैटिक वेक स्टैक_पश (स्टैक स्टैक) {for (int i = 0 i)<5 i++){ stack.push(i) } } static void stack_pop(Stack stack){ System.out.println('Pop :') for(int i = 0 i < 5 i++){ Integer y = (Integer) stack.pop() System.out.println(y) } } static void stack_peek(Stack stack){ Integer element = (Integer) stack.peek() System.out.println('Element on stack top : ' + element) } static void stack_search(Stack stack, int element){ Integer pos = (Integer) stack.search(element) if(pos == -1) System.out.println('Element not found') else System.out.println('Element is found at position ' + pos) } public static void main (String[] args){ Stack stack = new Stack() stack_push(stack) stack_pop(stack) stack_push(stack) stack_peek(stack) stack_search(stack, 2) stack_search(stack, 6) } } 

// आउटपुट

memory-allocation-in-java

अब, हम हीप स्पेस में चलते हैं।

जावा में हीप स्पेस

मेमोरी प्रोग्रामर द्वारा लिखित निर्देशों के निष्पादन के दौरान आवंटित की जाती है। ध्यान दें कि नाम हीप का ढेर डेटा संरचना से कोई लेना-देना नहीं है। इसे हीप कहा जाता है क्योंकि यह प्रोग्रामर को उपलब्ध मेमोरी स्पेस का ढेर है आवंटित किया गया तथा आबंटित करना यदि कोई प्रोग्रामर इस मेमोरी को अच्छी तरह से हैंडल नहीं करता है, तो मेमोरी लीक हो सकती हैकार्यक्रम में हो।

जावा हीप मेमोरी की मुख्य विशेषताएं

  • हमने अभी तक जो चर्चा की है, उसके अलावा ढेर जगह की कुछ अन्य विशेषताएं हैं:
  • इसमें जटिल मेमोरी प्रबंधन तकनीकों के माध्यम से प्रवेश किया गया है जिसमें शामिल हैं युवा पीढ़ी, पुराना या कार्यकाल पीढ़ी, तथा स्थायी पीढ़ी
  • यदि ढेर स्थान भरा है, तो जावा फेंकता है java.lang.OutOfMemoryError
  • स्टैक मेमोरी की तुलना में इस मेमोरी तक पहुंच अपेक्षाकृत धीमी है
  • स्टैक के विपरीत, यह मेमोरी, स्वचालित रूप से डील नहीं की जाती है। जरूरत कचरा इकट्ठा करने वाला मेमोरी उपयोग की दक्षता बनाए रखने के लिए अप्रयुक्त वस्तुओं को मुक्त करना
  • स्टैक के विपरीत, एक ढेर नहीं है सुरक्षित धागा और कोड को ठीक से सिंक्रनाइज़ करके संरक्षित करने की आवश्यकता है

जावा हीप स्पेस और स्टैक मेमोरी के बीच अंतर

उपरोक्त स्पष्टीकरणों के आधार पर, हम निम्नलिखित अंतरों के बीच आसानी से निष्कर्ष निकाल सकते हैं ढेर तथा ढेर याद।

  • ढेर मेमोरी का उपयोग एप्लिकेशन के सभी हिस्सों द्वारा किया जाता है जबकि स्टैक मेमोरी का उपयोग केवल निष्पादन के एक धागे द्वारा किया जाता है।
  • जब भी कोई ऑब्जेक्ट बनाया जाता है, तो वह हमेशा हीप स्पेस में संग्रहीत होता है और स्टैक मेमोरी में इसका संदर्भ होता है। स्टैक मेमोरी में केवल शामिल हैं स्थानीय आदिम चर तथा संदर्भ चर ढेर जगह में वस्तुओं के लिए।
  • ढेर में संग्रहित वस्तुएं विश्व स्तर पर सुलभ हैं, जबकि स्टैक मेमोरी को अन्य थ्रेड द्वारा एक्सेस नहीं किया जा सकता है।
  • स्टैक में मेमोरी प्रबंधन एक में किया जाता है LIFO तरीके जबकि यह हीप मेमोरी में अधिक जटिल है क्योंकि यह विश्व स्तर पर उपयोग किया जाता है। हीप मेमोरी में विभाजित है युवा-पीढ़ी, पुरानी पीढ़ी आदि, जावा कचरा संग्रह में अधिक जानकारी।
  • स्टैक मेमोरी है अल्पकालिक जबकि ढेर स्मृति आवेदन निष्पादन के अंत तक शुरू से रहता है।
  • हम प्रयोग कर सकते हैं -एक्सएमएक्स तथा -एक्सएमएस स्टार्टअप आकार और ढेर मेमोरी के अधिकतम आकार को परिभाषित करने के लिए जेवीएम विकल्प। हम प्रयोग कर सकते हैं -XSS स्टैक मेमोरी आकार को परिभाषित करने के लिए।
  • जब स्टैक मेमोरी भर जाती है, तो जावा रनटाइम थ्रो होता है java.lang.StackOverFlowError जबकि यदि ढेर स्मृति भरा है, तो यह फेंकता है java.lang.OutOfMemoryError: जावा हीप स्पेसत्रुटि।
  • ढेर मेमोरी का आकार हीप मेमोरी की तुलना में बहुत कम है। स्मृति आवंटन में सादगी के कारण (LIFO), जब की तुलना में स्टैक मेमोरी बहुत तेज हैढेर स्मृति।

तुलना चार्ट

पैरामेटेर ढेर HEAP
मूल मेमोरी को एक Contiguous Block में आवंटित किया गया हैमेमोरी को रैंडम ऑर्डर में आवंटित किया जाता है
आवंटन और निपटारा संकलक द्वारा स्वचालितप्रोग्रामर द्वारा मैनुअल
लागत कमअधिक
क्रियान्वयन कठिनआसान
पहूंच समय और तेजऔर धीमा
मुख्य मुद्दा स्मृति की कमीस्मृति विखंडन
अंतर का इलाका अति उत्कृष्टपर्याप्त
लचीलापन निर्धारित दरआकार बदलना संभव है

इसके साथ, हम इस 'जावा में मेमोरी आवंटन' ट्यूटोरियल के अंत में आते हैं। मुझे आशा है कि आप अवधारणा और इसके कार्यान्वयन को कुछ वास्तविक समय के उदाहरणों के माध्यम से समझ गए होंगे।

अब आप समझ गए होंगेजावा में मेमोरी आवंटनइस 'जावा में मेमोरी आवंटन' लेख के माध्यम से मूल बातें बाहर की जाँच करें 250,000 से अधिक संतुष्ट शिक्षार्थियों के एक नेटवर्क के साथ एक विश्वसनीय ऑनलाइन शिक्षण कंपनी, एडुरेका द्वारा, दुनिया भर में फैली हुई है। एडुर्का के जावा J2EE और SOA प्रशिक्षण और प्रमाणन पाठ्यक्रम उन छात्रों और पेशेवरों के लिए डिज़ाइन किए गए हैं जो जावा डेवलपर बनना चाहते हैं। पाठ्यक्रम आपको जावा प्रोग्रामिंग में एक शुरुआत देने के लिए डिज़ाइन किया गया है और आपको हाइबरनेट और जैसे विभिन्न जावा फ्रेमवर्क के साथ कोर और उन्नत जावा अवधारणाओं दोनों के लिए प्रशिक्षित करता है। वसंत

क्या आप हमसे कोई प्रश्न पूछना चाहते हैं? इसे 'जावा में मेमोरी आवंटन' ब्लॉग के टिप्पणी अनुभाग में उल्लेख करें और हम जल्द से जल्द आपके पास वापस आ जाएंगे।