7 deadly java.lang.OutOfMemoryError in Java Programming


java.lang.OutOfMemoryError is the most common error that is encountered by java programmers. As the Exception suggests that the issue here is related to memory. Mostly it may not be a programmer's fault, but sometimes memory leaks in the code can cause this issue. The JVM (Java Virtual Machine) throws this error message when no more objects can be added to the heap due to memory not available or the garbage collector is not able to free up memory space.

Types of java.lang.OutOfMemoryError Error messages

The OutOfMemoryError exception can occur due to various reasons, so let's look into a list of 7 different types of error messages one may encounter.

You are an Android Developer or a J2EE developer you will surely encounter one of the OutOfMemoryError errors listed below.

  1. java.lang.OutOfMemoryError: Java heap space
  2. This is the most common type of OutOfMemoryError error, its thrown when the JVM heap size if full and the GC garbage collector is unable to reclaim any objects. As discussed earlier it can be a genuine memory issue, or an issue caused due to memory leak. There are various tools available that can help you analyze code memory leaks. Reading heap dumps using analyses tools can help resolve memory leaks (example YourKit and JProfiler)

  3. java.lang.OutOfMemoryError: PermGen space
  4. PermGen space is a part of JVM. It is the space that is reserved for the long-term object. Garbage collection in PremGen happens only when under certain circumstances. This kind of error is thrown when PermGen space memory is full.

  5. java.lang.OutOfMemoryError: GC overhead limit exceeded
  6. This error message is thrown when the Garbage Collector it taking too long to recover too little memory. You would see a sharp increase in the CPU time utilization to free up a very little amount of memory.

  7. java.lang.OutOfMemoryError: unable to create new native thread
  8. This OutOfMemoryError error is thrown when the java process size has reached its maximum limit. This error is encountered mostly when too many threads are spawned.

  9. java.lang.OutOfMemoryError: Requested array size exceeds VM limit
  10. This OutOfMemoryError exception is thrown when you exceed the maximum size a Java Array object can have (usually Integer.MAX_VALUE of 2GB)

  11. java.lang.OutOfMemoryError: requested bytes for Chunk::new. Out of swap space
  12. This OutOfMemoryError exception is thrown when the JVM memory is full. It usually happens when there are too many processes running on the machine.

  13. java.lang.OutOfMemoryError: (Native method)
  14. The native code of Java is usually written in C (or maybe C++ too). As the exception tell the problem here is with the native code.

    Error Stacktrace
    java.lang.OutOfMemoryError: Java heap space
        at java.nio.HeapIntBuffer.(Unknown Source)
        at java.nio.IntBuffer.allocate(Unknown Source)
        at com.sun.javafx.tk.quantum.UploadingPainter.run(Unknown Source)
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
        at java.util.concurrent.FutureTask.runAndReset(Unknown Source)
        at com.sun.javafx.tk.RenderJob.run(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)java.lang.OutOfMemoryError: Java heap space
        at java.nio.HeapIntBuffer.(Unknown Source)
        at java.nio.IntBuffer.allocate(Unknown Source)
        at com.sun.javafx.tk.quantum.UploadingPainter.run(Unknown Source)
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
        at java.util.concurrent.FutureTask.runAndReset(Unknown Source)
        at com.sun.javafx.tk.RenderJob.run(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
    java.lang.OutOfMemoryError: Java heap space
        at java.nio.HeapIntBuffer.(Unknown Source)
        at java.nio.IntBuffer.allocate(Unknown Source)
        at com.sun.javafx.tk.quantum.UploadingPainter.run(Unknown Source)
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
        at java.util.concurrent.FutureTask.runAndReset(Unknown Source)
        at com.sun.javafx.tk.RenderJob.run(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(Unknown Source)