কম্পিউটার

একটি OutOfMemoryError কি এবং জাভাতে OOM এর মূল কারণ খুঁজে বের করার পদক্ষেপগুলি কী?


OutOfMemoryError JVM দ্বারা নিক্ষিপ্ত হয় , যখন JVM-এ পর্যাপ্ত উপলব্ধ মেমরি নেই, বরাদ্দ করার জন্য। OutOfMemoryError E এর মধ্যে পড়ে ত্রুটির বিভাগ ব্যতিক্রম -এ শ্রেণী অনুক্রম।

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 ব্যবহার করুন হিপ ডাম্প ফাইল পড়তে এবং সমস্যাটি নির্ণয় করুন। ভিজ্যুয়ালভিএম JDK_HOME/bin/jvisualvm-এ অবস্থিত একটি প্রোগ্রাম . হিপ ডাম্প ফাইল অ্যাপ্লিকেশনটির মেমরি ব্যবহার সম্পর্কে সমস্ত তথ্য রয়েছে৷


  1. জাভাতে JRadioButton এবং JCheckBox এর মধ্যে পার্থক্য কি?

  2. একটি ইভেন্ট হ্যান্ডলিং কি এবং জাভাতে ইভেন্ট হ্যান্ডলিং এর উপাদানগুলি বর্ণনা করে?

  3. জাভাতে JTextField এবং JTextArea এর মধ্যে পার্থক্য কি?

  4. জাভাতে JFrame এবং JDialog এর মধ্যে পার্থক্য কি?