I am looking into the various options around garbage collection on a Java 6 18 VM and would like some pointers.
We run our application on JBoss, and occasionally there are the infamous PermGen errors during redeploys. There is a lot of conflicting and obsolete information on the internet about the best way to solve or mitigate this problem.
From what I can see, the following is correct:
- VM options on their own will not resolve this issue, only postpone it.
- The only reliable way to fix this problem is to fix coding errors either in the Application Server itself (unlikely) or the code (our code or third-party libraries) that is running in the Application Server (more likely). The filling of Permgen is often the result of references from objects loaded by the application classloader to objects loaded by the Application Server classloader, thus preventing garbage collection of the application's classloader.
I have two questions resulting from this:
- Is the above correct?
- Where do the VM options
CMSClassUnloadingEnabled
andCMSPermGenSweepingEnabled
come into this? From what I can seeCMSClassUnloadingEnabled
supercedes or implicitly enablesCMSPermGenSweepingEnabled
. Do either of them help with the above problem?