Java Out of Memory problems
Sunday, September 18, 2011, 02:31 PM -
ProgrammingPosted by Freddy Chu
Java heap
java.lang.OutOfMemoryError: Java heap
Just simply apply -Xmx will fix the issue. But notice that one thing there have max. value for difference os.
e.g.
32bit Windows around 2G
32bit Linux around 2.5G
64bit I only tried to use 4G, the limit seems much higher than 32bit systems.
PermGen space
java.lang.OutOfMemoryError: PermGen space
Presenting the Permanent GenerationBy my understanding, PermGen space is for loading classes specifications. Usually you will not able to see this exception. Expecte that you have many lib need to be load and use.
Using Jboss with more than 1 big web application may hit this. You can change this limit by using -XX:PermSize and -XX:MaxPermSize
e.g.
-XX:PermSize=128m
-XX:MaxPermSize=128m
GC overhead limit exceeded
I think this is most uncommon exception that will be hitted
java.lang.OutOfMemoryError: GC overhead limit exceeded
Excessive GC Time and OutOfMemoryError
The parallel collector will throw an OutOfMemoryError if too much time is being spent in garbage collection: if more than 98% of the total time is spent in garbage collection and less than 2% of the heap is recovered, an OutOfMemoryError will be thrown. This feature is designed to prevent applications from running for an extended period of time while making little or no progress because the heap is too small. If necessary, this feature can be disabled by adding the option -XX:-UseGCOverheadLimit to the command line.
sourceThe best way is to solve the coding problem. It is believed that the code have genereated too many trivial object. Especially in loops, if that is the case rather reuse the object than new an object.
If you really don't want to change the code or you cannot found the problem you can try the following way. Hopefully it will solve the issue, but not the best way and may require a long time to finish.
JVM have 3 difference garbage collectors you can try switching between them.
serial collectorsingle processor
jvm flag: -XX:+UseSerialGC
parallel collectorhigh throughput sometimes with pause
jvm flag: -XX:+UseParallelGC
concurrent collectorlow lag time & moderate throughput
jvm flag: -XX:+UseConcMarkSweepGC -XX:+UseParNewGC