69

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

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

以后请使用 CMSClassUnloadingEnabled 代替 CMSPermGenSweepingEnabled

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

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

提前致谢

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

4

1 回答 1

78

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

于 2010-09-15T17:14:05.157 回答