java.lang.OutOfMemoryError is thrown when there is insufficient space to allocate an object. That is, garbage collection cannot make any further space available to accommodate a new object, and the heap cannot be further expanded.
An OutOfMemoryError does not necessarily imply a memory leak. The issue might simply be a configuration issue, for example, if the specified heap size (or the default size if not specified) is insufficient for the application.
The first step in diagnosing an OutOfMemoryError is to examine the full error message. In the exception message, further information is supplied after “java.lang.OutOfMemoryError”. Here are some common examples of what that additional information may be, what it may mean, and what to do about it:
- Java heap space This indicates that an object could not be allocated in the heap. The issue may be just a configuration problem. You could get this error, for example,
- If the maximum heap size specified by the –Xmx command-line option (or selected by default) is insufficient for the application.
- It could also be an indication that objects that are no longer needed cannot be garbage collected because the application is unintentionally holding references to them. The HAT ( Heap Analysis Tool ) tool can be used to view all reachable objects and understand which references are keeping each one alive.
- the excessive use of finalizers by the application such that the thread to invoke the finalizers cannot keep up with the rate of addition of finalizers to the queue. One other potential source of this error could be The jconsole management tool can be used to monitor the number of objects that are pending finalization.
- PermGen space This indicates that the permanent generation ( area of the heap where the JVM stores its metadata ) is full. If an application loads a large number of classes, then the permanent generation may need to be increased. You can do so by specifying the command line option –XX:MaxPermSize=n, where n specifies the size.
- Requested array size exceeds VM limit This indicates that the application attempted to allocate an array that is larger than the heap size. For example, if an application tries to allocate an array of 512MB but the maximum heap size is 256MB, then this error will be thrown. In most cases, the problem is likely to be either that the heap size is too small or that a bug results in the application attempting to create an array whose size is calculated to be incorrectly huge.