Page 7 of 35
IBM Software Group
© 2003 IBM Corporation
Troubleshooting out of memory conditions
© 2007 IBM Corporation
7
Not enough native memory
There is more than sufficient space in the JVM
heap, but the allocation still fails
The JVM is not trying to allocate a large object
When the Java Virtual Machine is unable to find enough contiguous memory in the heap for object allocation, and it has already called the garbage
collection routine, it will then attempt to grow the JVM heap. In order to grow the JVM heap the JVM must request, and be granted, system memory from
the operating system Memory Management Unit (MMU). If the MMU is unable to provide memory to the JVM for heap expansion, the JVM will throw
OutOfMemoryError. Every Java thread running within a JVM also has an associated thread stack, which requires system memory. If there is not enough
memory in the system for the allocation of a Java thread, the system will again throw OutOfMemoryError. Finally, through the Java Native Interface (JNI)
the application can access system libraries, which require native system memory to be loaded. If the application fails to remove unused references to JNI
objects it will cause a native memory leak. If the system is low on native memory to begin with and is unable to provide memory for the object allocation,
the JVM will also throw OutOfMemoryError.