【问题标题】:CMSPermGenSweepingEnabled vs CMSClassUnloadingEnabledCMSPermGenSweepingEnabled 与 CMSClassUnloadingEnabled
【发布时间】:2011-04-12 16:31:27
【问题描述】:

我以前曾问过这个问题 - What does JVM flag CMSClassUnloadingEnabled actually do?,但这次略有不同!

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

以后请使用 CMSClassUnloadingEnabled 代替 CMSPermGenSweepingEnabled

-XX:+CMSPermGenSweepingEnabled 标志通常用于缓解PermGen OutOfMemory 错误,但我有read elsewhere 表示人们发现按照上述建议他们仍然有这些错误,但坚持使用-XX:+CMSPermGenSweepingEnabled 作为以及-XX:+CMSClassUnloadingEnabled 他们的虚拟机在重新启动之间停留的时间更长。

-XX:+CMSClassUnloadingEnabled 真的取代了-XX:+CMSPermGenSweepingEnabled 还是两者兼而有之?

提前致谢

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

【问题讨论】:

    标签: java jvm-arguments


    【解决方案1】:

    据我所知,1.6 JVM 对CMSPermGenSweepingEnabled 所做的唯一事情就是打印该消息——它没有像 1.5 那样处理。要使CMSClassUnloadingEnabled 产生任何影响,还必须设置UseConcMarkSweepGC

    【讨论】:

    • 谢谢 - 你有任何链接或其他方式来备份它吗?
    • 下载JDK源代码(包括热点)并检查hotspot/src/share/vm/runtime/globals.hppCMSPermGenSweepingEnabled 在 1.5 中存在,在 1.6 中不存在。此外,hotspot/src/share/vm/runtime/arguments.cpp 的 1.6 版本包含用于打印消息的新代码。
    • -XX:+CMSClassUnloadingEnabled 和 -XX:+CMSPermGenSweepingEnabled 在 java 1.7 中不可用,请参阅link
    • 根据 Oracle(参见 blogs.oracle.com/poonam/entry/…)选项 -XX:+CMSClassUnloadingEnabled 对于 Java 1.7 仍然有效。
    • 对于 1.8 不再有效 - blogs.oracle.com/poonam/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    • 2016-02-23
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    相关资源
    最近更新 更多