- मेरे ज्ञान तक, ढेर स्थान केवल उदाहरण चर द्वारा कब्जा कर लिया है। यदि यह सही है, तो ऑब्जेक्ट के निर्माण के समय स्पेस चर के रूप में कुछ समय के लिए ठीक चलने के बाद यह त्रुटि क्यों हुई।
इसका मतलब है कि आप लगातार समय के साथ अपने आवेदन में अधिक वस्तुओं का निर्माण कर रहे हैं। नई वस्तुओं को ढेर मेमोरी में संग्रहीत किया जाएगा और यही ढेर मेमोरी में वृद्धि का कारण है।
ढेर न केवल उदाहरण चर होते हैं। यह सभी गैर-आदिम डेटा प्रकारों (ऑब्जेक्ट्स) को संग्रहीत करेगा। ये ऑब्जेक्ट्स लाइफ टाइम कम (मेथड ब्लॉक) या लॉन्ग हो सकते हैं (जब तक कि आपके आवेदन में ऑब्जेक्ट को संदर्भित नहीं किया जाता है)
- क्या ढेर के स्थान को बढ़ाने का कोई तरीका है?
हाँ। अधिक विवरण के लिए इस ओरेकल लेख पर एक नज़र डालें ।
ढेर का आकार निर्धारित करने के लिए दो मापदंड हैं:
-Xms:, जो प्रारंभिक और न्यूनतम हीप आकार निर्धारित करता है
-Xmx:, जो अधिकतम ढेर आकार निर्धारित करता है
- मुझे अपने कार्यक्रम में क्या बदलाव करने चाहिए ताकि यह कम जगह ले सके?
यह आपके आवेदन पर निर्भर करता है।
अपने आवेदन की आवश्यकता के अनुसार अधिकतम ढेर मेमोरी सेट करें
अपने एप्लिकेशन में मेमोरी लीक का कारण न बनें
यदि आप अपने एप्लिकेशन में मेमोरी लीक पाते हैं, तो मूल कारण जैसे कि MAT , Visual VM , jconsole आदि की मदद से मूल कारण का पता लगाएं। एक बार जब आप मूल कारण को खोज लेते हैं, तो लीक को ठीक करें।
ओरेकल लेख से महत्वपूर्ण नोट्स
कारण: विस्तार संदेश जावा हीप स्पेस इंगित करता है कि ऑब्जेक्ट जावा हीप में आवंटित नहीं किया जा सकता है। यह त्रुटि जरूरी नहीं कि एक मेमोरी लीक है।
संभावित कारण:
- अनुचित विन्यास (पर्याप्त मेमोरी का आवंटन नहीं)
- आवेदन अनायास ही वस्तुओं के संदर्भ में है और यह वस्तुओं को कचरा एकत्र होने से रोकता है
- अनुप्रयोग जो फाइनल का अत्यधिक उपयोग करते हैं। यदि किसी वर्ग की अंतिम विधि होती है, तो उस प्रकार की वस्तुओं को कचरा संग्रहण के समय पुनः प्राप्त नहीं किया जाता है। यदि अंतिम सूत्र अंतिम पंक्ति के साथ नहीं रह सकता है, तो Java हीप भर सकता है और इस प्रकार का OutOfMemoryError अपवाद फेंक दिया जाएगा ।
एक अलग नोट पर, बेहतर कचरा संग्रह एल्गोरिदम ( CMS या G1GC ) का उपयोग करें
G1GC को समझने के लिए इस प्रश्न पर एक नज़र डालें