OutOfMemoryError হলো JVM দ্বারা নিক্ষেপিত একটি এরর, যা ঘটে যখন JVM-র কাছে alokেট করার জন্য পর্যাপ্ত মেমরি থাকে না। OutOfMemoryError এক্সেপশন ক্লাস হায়ারার্কিতে Error ক্যাটাগরিতে পড়ে।
OutOfMemoryError জেনারেট করার পদ্ধতি
- বড় আকারের মেমরি alokেট করুন, যা হিপ মেমরি স্টোরেজ খালি করবে।
- মেমরি alokেট করা চালিয়ে যান, এক সময় JVM-র কাছে alokেট করার জন্য পর্যাপ্ত মেমরি থাকবে না, তখন 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");
// ইনফরমেশন লগ করুন, যাতে স্ট্যাটিস্টিক্স জেনারেট করা যায়
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-এর রুট কজ খুঁজে বের করার ধাপগুলো
ধাপ ১: OutOfMemoryError-এ হিপ ডাম্প জেনারেট করুন
অ্যাপ্লিকেশনটি VM আর্গুমেন্ট -XX:+HeapDumpOnOutOfMemoryError দিয়ে শুরু করুন। এটি JVM-কে বলবে OOM হলে একটি হিপ ডাম্প প্রোডিউস করতে।
$ java -XX:+HeapDumpOnOutOfMemoryError ...
ধাপ ২: সমস্যাটি রিপ্রোডিউস করুন
যদি ডেভেলপমেন্ট এনভায়রনমেন্টে সমস্যাটি রিপ্রোডিউস করা না যায়, তবে প্রোডাকশন এনভায়রনমেন্ট ব্যবহার করতে হতে পারে। যখন সমস্যাটি রিপ্রোডিউস হবে এবং অ্যাপ্লিকেশন OOM থ্রো করবে, তখন একটি হিপ ডাম্প ফাইল জেনারেট হবে।
ধাপ ৩: হিপ ডাম্প ফাইল ব্যবহার করে সমস্যাটি ইনভেস্টিগেট করুন
VisualVM ব্যবহার করে হিপ ডাম্প ফাইল পড়ুন এবং সমস্যাটি ডায়াগনোজ করুন। VisualVM হলো JDK_HOME/bin/jvisualvm এ অবস্থিত একটি প্রোগ্রাম। হিপ ডাম্প ফাইল তে অ্যাপ্লিকেশনটির মেমরি ইউজ সম্পর্কে সকল ইনফরমেশন থাকে।