CMSPermGenSweepingEnabled与CMSClassUnloadingEnabled

我曾问过这个问题 – JVM标志CMSClassUnloadingEnabled实际上做了什么? ,但是这次有点不同!

如果我使用-XX:+CMSPermGenSweepingEnabled标志设置启动了一个Java VM,则会打印以下消息:

将来请使用CMSClassUnloadingEnabled来代替CMSPermGenSweepingEnabled

-XX:+CMSPermGenSweepingEnabled标志通常用于缓解PermGen OutOfMemory错误,但是我已经在其他地方看到人们已经发现通过遵循上述build议,他们仍然有这些错误,但通过坚持使用-XX:+CMSPermGenSweepingEnabled-XX:+CMSClassUnloadingEnabled它们的虚拟机在重启之间停留时间更长。

是否-XX:+CMSClassUnloadingEnabled确实取代了-XX:+CMSPermGenSweepingEnabled ,还是让它们都有一些好处?

提前致谢

Rich ps:我知道perm gen问题的根本原因通常仍然是Classloader泄漏,如果使用上述选项,这更多的是JVM产生的消息。

从我所知道的情况来看,1.6 JVM用CMSPermGenSweepingEnabled做的唯一事情就是打印这条消息 – 它没有像1.5那样处理。 对于CMSClassUnloadingEnabled有任何影响,还必须设置UseConcMarkSweepGC