Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Java

जावा में मेमोरी लीक

जावा में, गार्बेज कलेक्शन (डिस्ट्रक्टर का काम) स्वचालित रूप से गार्बेज कलेक्शन का उपयोग करके किया जाता है। लेकिन क्या होगा अगर कोड में ऐसे ऑब्जेक्ट्स हैं जिनके संदर्भ हैं? उन्हें डी-एलोकेट नहीं किया जा सकता, यानी उनकी मेमोरी क्लियर नहीं की जा सकती। यदि ऐसी स्थिति बार-बार होती है, और बनाए गए या संदर्भित ऑब्जेक्ट्स का बिल्कुल भी उपयोग नहीं किया जाता है, तो वे बेकार हो जाते हैं। इसे ही मेमोरी लीक के रूप में जाना जाता है।

यदि मेमोरी लिमिट पार हो जाती है, तो प्रोग्राम एक त्रुटि फेंककर समाप्त हो जाता है, यानी OutOfMemoryError। यही कारण है कि हमेशा ऑब्जेक्ट के सभी संदर्भों को हटाने का सुझाव दिया जाता है ताकि जावा गार्बेज कलेक्टर स्वचालित रूप से इसे नष्ट कर सके।

नीचे एक उदाहरण दिया गया है जो दर्शाता है कि जब बहुत अधिक मेमोरी का उपयोग करने का प्रयास किया जाता है तो कंपाइलर कैसे स्पेस से बाहर हो जाता है:

उदाहरण

import java.util.Vector; 
public class Demo{ 
    public static void main(String[] args){ 
        Vector my_v1 = new Vector(314567); 
        Vector my_v2 = new Vector(784324678); 
        System.out.println("यह प्रिंट होने वाली अंतिम लाइन है"); 
    } 
}

आउटपुट

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
at java.base/java.util.Vector.<init>(Vector.java:142) 
at java.base/java.util.Vector.<init>(Vector.java:155) 
at Demo.main(Demo.java:7)

Demo नामक एक क्लास में मुख्य फंक्शन होता है जहां दो वेक्टर ऑब्जेक्ट्स को बहुत बड़े स्पेस असाइन करके बनाया गया है। अंतिम प्रिंट लाइन यह जांचने के लिए लिखी गई है कि क्या कंपाइलर उस लाइन तक पहुंचता है। वास्तव में, यह नहीं पहुंचता, क्योंकि इन वेक्टर्स द्वारा घेरा गया स्पेस बहुत बड़ा है और इतनी मेमोरी आवंटित नहीं की जा सकती, जिसके परिणामस्वरूप एक त्रुटि होती है।

  1. - Java में Stream

    Stream एक स्रोत से ऑब्जेक्ट्स के अनुक्रम को दर्शाता है, जो एग्रीगेट ऑपरेशन्स का समर्थन करता है। Stream की विशेषताएं निम्नलिखित हैं: तत्वों का अनुक्रम - एक स्ट्रीम एक विशिष्ट प्रकार के तत्वों का एक सेट क्रमिक तरीके से प्रदान करती है। एक स्ट्रीम मांग पर तत्व प्राप्त/कंप्यूट करती है। यह कभी भी तत्वों

  1. - Java में कौन सी कलेक्शन क्लासेस थ्रेड-सेफ हैं?

    थ्रेड-सेफ क्लास एक ऐसी क्लास है जो गारंटी देती है कि क्लास की आंतरिक स्थिति और साथ ही मेथड्स से लौटाए गए मान, कई थ्रेड्स से समवर्ती रूप से इनवोक किए जाने पर सही हैं। Java में थ्रेड-सेफ कलेक्शन क्लासेस Stack, Vector, Properties, Hashtable आदि हैं।StackJava में Stack क्लास LIFO सिद्धांत पर आधारित स्टै

  1. - जावा में प्रोग्राम द्वारा उपयोग की गई मेमोरी कैसे चेक करें?

    लंबे समय तक चलने वाले जावा कोड के लिए, जो डायनामिक मेमोरी का भारी उपयोग करता है, हम हीप स्पेस की मेमोरी की कमी के कारण आउट-ऑफ-मेमोरी एरर्स के साथ समाप्त हो सकते हैं। नीचे दिए गए प्रोग्राम में, हम एक प्रोग्राम द्वारा उपयोग की जाने वाली फ्री जावा हीप स्पेस का परीक्षण कर सकते हैं। यदि हीप स्पेस का उप