Simulate or generate Out of memory error in java (with example)

What is OutOfMemoryError ?

  • The OutOfMemoryError is thrown by  JVM, when JVM does not have enough available memory, to allocate.
  • OutOfMemoryError falls into the error category (Exception class hierarchy) of VirtualMachineError.

Exception class hierarchy

  • We have shown some of exception classes in Fig 1.
Out of memory jvm exception
Fig 1: Exception class hierarchy

The simulation of OutOfMemoryError:

  • We will allocate large chunk of memory, which will exhaust heap memory storage.
  • We will keep on allocating the memory (in below program) and point will reach, when JVM will not have enough memory to allocate, then.
    • OutOfMemoryError will be thrown
  • We will  catch out of memory error (Note: we can not recover from error conditions e.g. OutOfMemoryError, StackOverflowError etc.).
    • We can log the OutOfMemoryError (e.g to generate the statistics etc).

Program to simulate or generate OutOfMemoryError in java.

package org.learn;
 
public class SimulateOutOfMemoryError {
 
    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 (latter on).
            throw outofMemory;
        }
    }
 
}

Output of OutOfMemoryError (usage of JVM memory)

Max JVM memory: 926941184
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 org.learn.SimulateOutOfMemoryError.main(SimulateOutOfMemoryError.java:13)