2010-09-15 23 views
67

我有点问过这个问题之前 - What does JVM flag CMSClassUnloadingEnabled actually do?,但这次它有点不同!CMSPermGenSweepingEnabled vs CMSClassUnloadingEnabled

如果我启动Java VM与-XX:+CMSPermGenSweepingEnabled标志设置,打印以下消息:

请在未来

使用CMSClassUnloadingEnabled到位CMSPermGenSweepingEnabled的-XX:+CMSPermGenSweepingEnabled标志被经常使用以减轻对PermGen OutOfMemory错误,但我有read elsewhere,人们发现,通过遵循上述建议,他们仍然有这些错误,但通过坚持与-XX:+CMSPermGenSweepingEnabled以及-XX:+CMSClassUnloadingEnabled他们的VM在重启之间保持了更长的时间。

请问-XX:+CMSClassUnloadingEnabled是否真的取代了-XX:+CMSPermGenSweepingEnabled还是让它们兼有还有一些好处?

在此先感谢

丰富 PS:我知道,烫发根问题的根本原因仍然是一般类加载器泄漏,这更多的是,如果我们使用上述选项的JVM产生的消息。

回答

74

从我所知道的来看,1.6 JVM与CMSPermGenSweepingEnabled所做的唯一一件事就是打印该消息 - 它的处理方式与1.5版本不同。要使CMSClassUnloadingEnabled产生任何影响,还必须设置UseConcMarkSweepGC

+1

谢谢 - 你有任何链接或其他方式来支持? – Rich

+28

下载JDK源代码(包括热点)并检查'hotspot/src/share/vm/runtime/globals.hpp'。 'CMSPermGenSweepingEnabled'在1.5中存在,在1.6中不存在。另外,1.6版本的'hotspot/src/share/vm/runtime/arguments.cpp'包含了用于打印消息的新代码。 – kschneid

+0

这是有帮助 – hvgotcodes

相关问题