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