CMSPermGenSweepingEnabled与CMSClassUnloadingEnabled


68

我之前曾问过这个问题-JVM标志CMSClassUnloadingEnabled实际做什么?,但是这次略有不同!

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

以后请使用CMSClassUnloadingEnabled代替CMSPermGenSweepingEnabled

-XX:+CMSPermGenSweepingEnabled标志通常用于减轻PermGen OutOfMemory错误,但是我在其他地方读到,人们发现通过遵循上述建议,他们仍然存在这些错误,但是坚持使用-XX:+CMSPermGenSweepingEnabled以及-XX:+CMSClassUnloadingEnabled他们的VM在重新启动之间停留的时间更长。

难道-XX:+CMSClassUnloadingEnabled真的优先于-XX:+CMSPermGenSweepingEnabled或者是仍然在他俩都有些什么好处?

提前致谢

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

Answers:


77

据我所知,1.6 JVM唯一要做的CMSPermGenSweepingEnabled就是打印该消息-它未按照1.5中的方式进行处理。为了CMSClassUnloadingEnabled产生任何影响,UseConcMarkSweepGC还必须设置。


1
谢谢-您是否有任何链接或其他方式支持此操作?
丰富

28
下载JDK源代码(包括热点)并检查hotspot/src/share/vm/runtime/globals.hppCMSPermGenSweepingEnabled在1.5中存在,而在1.6中不存在。此外,的1.6版本hotspot/src/share/vm/runtime/arguments.cpp包含用于打印消息的新代码。
kschneid 2010年

好的,在jdk 1.6.23源代码中,除了将globals.hpp设置为false之外,没有找到其他使用位置。所以它真的用吗???对不起,如果我错过了使用它的地方。
2011年

14
-XX:+ CMSClassUnloadingEnabled和-XX:+ CMSPermGenSweepingEnabled在Java 1.7中不可用,请参阅链接
Marko Vranjkovic,2013年

8
根据Oracle(请参阅blogs.oracle.com/poonam/entry/…),该选项-XX:+CMSClassUnloadingEnabled对于Java 1.7仍然有效。
克里斯·B
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.