CMSPermGenSweepingEnabled против CMSClassUnloadingEnabled - PullRequest
67 голосов
/ 15 сентября 2010

Я уже как-то задавал этот вопрос раньше - Что на самом деле делает флаг CMSClassUnloadingEnabled JVM? , но на этот раз он немного другой!

Если я запускаю виртуальную машину Java с установленным флагом -XX:+CMSPermGenSweepingEnabled, выводится следующее сообщение:

Пожалуйста, используйте CMSClassUnloadingEnabled вместо CMSPermGenSweepingEnabled в будущем

Флаг -XX:+CMSPermGenSweepingEnabled часто используется для смягчения ошибок PermGen OutOfMemory, однако я читал в другом месте , что люди обнаружили, что, следуя приведенному выше совету, они все еще имели эти ошибки, но придерживаясь с -XX:+CMSPermGenSweepingEnabled, а также -XX:+CMSClassUnloadingEnabled их виртуальная машина дольше работала между перезапусками.

Действительно ли -XX:+CMSClassUnloadingEnabled заменяет -XX:+CMSPermGenSweepingEnabled или все же есть какая-то польза от их обоих?

Заранее спасибо

Rich PS: я знаю, что основной причиной проблем с perm gen по-прежнему являются утечки Classloader, это больше о сообщении, которое JVM выдает, если мы используем вышеуказанные опции.

1 Ответ

76 голосов
/ 15 сентября 2010

Из того, что я могу сказать, единственная вещь, которую 1.6 JVM делает с CMSPermGenSweepingEnabled, - это распечатать это сообщение - оно не обрабатывается, как в 1.5.Чтобы CMSClassUnloadingEnabled оказал какое-либо влияние, необходимо также установить UseConcMarkSweepGC.

...