Maybe you know the situation: you are developing a web application
using the Maven build system along with an application server like
Tomcat or Jetty and a corresponding plugin (e.g. the all famous jetty-maven-plugin).
One of the coolest features of these containers is the hot-deployment.
However, every second time a hot deployment is executed, it crashes due to a PermGen space Exception or a similar OutOfMemoryException.
The cause for this behaviour is a memory leak with the classloaded
of these containers. If you are interested in the details, you may read
this article on the Classloader Memory Leaks.
Actually, you can’t fix this bug. But there is a way to prevent it
from beeing so painful. And it’s pretty easy: simply assign more memory
to your JVM!
In order to do so, create a new environment variable named
MAVEN_OPTS. Maybe you already defined this variable. What you have to do now is to adjust the
MaxPermSize (and the other parameters, too) to a proper value according to your machine’s memory.
For instance, set the MAVEN_OPTS like this:
-Xms512m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m
Having 2 GB of RAM, these values are a good start.
Now you should be rid of the nasty PermGen space exceptions.