views:

337

answers:

1

Hi

I've kind of asked this question before, but this time it's slightly different!

If I start a Java VM with the -XX:+CMSPermGenSweepingEnabled flag set, the following message is printed:

Please use CMSClassUnloadingEnabled in place of CMSPermGenSweepingEnabled in the future

The -XX:+CMSPermGenSweepingEnabled flag is often used to mitigate against PermGen OutOfMemory errors, however I have read elsewhere that people have found that by following the above advice they have still had these errors, but by sticking with -XX:+CMSPermGenSweepingEnabled as well as -XX:+CMSClassUnloadingEnabled their VM has stayed up longer between restarts.

Does -XX:+CMSClassUnloadingEnabled really supersede -XX:+CMSPermGenSweepingEnabled or is there still some benefit in having them both?

Thanks in advance

Rich ps: I know that the root cause of perm gen issues is still usually Classloader leaks, this is more about the message that the JVM produces if we use the above options.

+2  A: 

From what I can tell, the only thing that the 1.6 JVM does with CMSPermGenSweepingEnabled is to print that message - it's not processed the way it is in 1.5. For CMSClassUnloadingEnabled to have any impact, UseConcMarkSweepGC must also be set.

kschneid
Thanks - do you have any links or other ways to back this up?
Rich
Download the JDK source code (which includes hotspot) and inspect `hotspot/src/share/vm/runtime/globals.hpp`. `CMSPermGenSweepingEnabled` is present in 1.5 and absent in 1.6. In addition, the 1.6 version of `hotspot/src/share/vm/runtime/arguments.cpp` contains new code for printing the message.
kschneid
this is helpful
hvgotcodes