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

OutOfMemoryError क्या है और जावा में OOM के मूल कारण का पता लगाने के चरण क्या हैं?

OutOfMemoryError JVM . द्वारा फेंका गया है , जब JVM के पास आवंटित करने के लिए पर्याप्त उपलब्ध मेमोरी नहीं है। OutOfMemoryError . में पड़ता है त्रुटि श्रेणी अपवाद . में वर्ग पदानुक्रम।

OutOfMemoryError उत्पन्न करने के लिए

  • हम मेमोरी का एक बड़ा हिस्सा आवंटित करेंगे, जो मेमोरी स्टोरेज को ढेर कर देगा
  • हम मेमोरी आवंटित करना जारी रखेंगे और बिंदु तक पहुंच जाएगा, जब JVM के पास आवंटित करने के लिए पर्याप्त मेमोरी नहीं होगी, तब OutOfMemoryError फेंक दिया जाएगा।
  • एक बार जब हम OutOfMemory . को पकड़ लेंगे त्रुटि, हम त्रुटि लॉग कर सकते हैं।

उदाहरण

public class OutOfMemoryErrorDemo {
   public static void main(String[] args) throws Exception {
      int dummyArraySize = 15;
      System.out.println("Max JVM memory: " + Runtime.getRuntime().maxMemory());
      long memoryConsumed = 0;
      try {
         long[] memoryAllocated = null;
         for(int loop = 0; loop < Integer.MAX_VALUE; loop++) {
            memoryAllocated = new long[dummyArraySize];
            memoryAllocated[0] = 0;
            memoryConsumed += dummyArraySize * Long.SIZE;
            System.out.println("Memory Consumed till now: " + memoryConsumed);
            dummyArraySize *= dummyArraySize * 2;
            Thread.sleep(500);
         }
      } catch (OutOfMemoryError outofMemory) {
         System.out.println("Catching out of memory error");
         //Log the information, so that we can generate the statistics
         throw outofMemory;
      }
   }
}

आउटपुट

Max JVM memory: 119537664
Memory Consumed till now: 960
Memory Consumed till now: 29760
Memory Consumed till now: 25949760
Catching out of memory error
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at OutOfMemoryErrorDemo.main(OutOfMemoryErrorDemo.java:9)


OOM के मूल कारण का पता लगाने के लिए कदम

चरण 1:OutOfMemoryError पर हीप डंप जेनरेट करें

अनुप्रयोग को VM तर्क -XX:+HeapDumpOnOutOfMemoryError के साथ प्रारंभ करें . यह JVM को हीप डंप बनाने के लिए कहेगा जब कोई OOM होता है

$ java -XX:+HeapDumpOnOutOfMemoryError ...

चरण 2:समस्या को पुन:उत्पन्न करें

अगर हम समस्या का पुनरुत्पादन . नहीं कर सकते हैं विकास परिवेश . में , हमें उत्पादन . का उपयोग करना पड़ सकता है पर्यावरण . जब हम समस्या को पुन:उत्पन्न करते हैं और एप्लिकेशन एक OOM फेंकता है, तो यह एक हीप डंप फ़ाइल उत्पन्न करेगा।

चरण3:हीप डंप फ़ाइल का उपयोग करके समस्या की जांच करें

VisualVM . का प्रयोग करें हीप डंप फ़ाइल को पढ़ने के लिए और समस्या का निदान करें। VisualVM JDK_HOME/bin/jvisualvm . में स्थित एक प्रोग्राम है . हीप डंप फ़ाइल एप्लिकेशन के मेमोरी उपयोग के बारे में सभी जानकारी है।


  1. इवेंट हैंडलिंग क्या है और जावा में इवेंट हैंडलिंग में घटकों का वर्णन करें?

    Java में GUI माउस . के माध्यम से उपयोगकर्ताओं के साथ इंटरैक्शन को प्रोसेस करता है , कीबोर्ड और विभिन्न उपयोगकर्ता नियंत्रण जैसे बटन , चेकबॉक्स , पाठ फ़ील्ड , आदि घटनाओं के रूप में। जावा को ईवेंट-ड्रिवन प्रोग्रामिंग . के रूप में लागू करने के लिए इन इवेंट को ठीक से हैंडल किया जाना चाहिए इवेंट हैंडल

  1. जावा में JTextField और JTextArea के बीच क्या अंतर हैं?

    JTextField . के बीच मुख्य अंतर और JTextArea जावा में यह है कि एक JTextField पाठ की एक पंक्ति . में प्रवेश करने की अनुमति देता है GUI एप्लिकेशन में जबकि JTextArea पाठ की एक से अधिक पंक्तियाँ entering दर्ज करने की अनुमति देता है GUI एप्लिकेशन में। JTextField एक JTextFeld सबसे महत्वपूर्ण घटकों म

  1. जावा में JFrame और JDialog में क्या अंतर हैं?

    जेफ्रेम फ्रेम में जोड़े गए घटकों को इसकी सामग्री के रूप में संदर्भित किया जाता है, इन्हें contentPane द्वारा प्रबंधित किया जाता है . JFrame . में एक घटक जोड़ने के लिए , हमें इसके contentPane . का उपयोग करना चाहिए इसके बजाय। एक JFrame शीर्षक . के साथ एक विंडो है , सीमा , (वैकल्पिक) मेनू बार और उप