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

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

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

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

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

उदाहरण

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("This is the last line to be printed");
   }
}

आउटपुट

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)
पर

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


  1. जावा में स्ट्रीम करें

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

  1. जावा में कौन सी संग्रह कक्षाएं थ्रेड-सुरक्षित हैं?

    एक थ्रेड-सुरक्षित वर्ग एक ऐसा वर्ग है जो कक्षा की आंतरिक स्थिति की गारंटी देता है और साथ ही विधियों से लौटाए गए मान सही हैं, जबकि कई थ्रेड्स से समवर्ती रूप से आह्वान किया जाता है। संग्रह कक्षाएं जो थ्रेड-सुरक्षित . हैं जावा में स्टैक हैं , वेक्टर , गुण , हैशटेबल , आदि. ढेर द स्टैक जावा में क्लास स्

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

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