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 . में स्थित एक प्रोग्राम है . हीप डंप फ़ाइल एप्लिकेशन के मेमोरी उपयोग के बारे में सभी जानकारी है।