CMSPermGenSweepingEnabled vs CMSClassUnloadingEnabled

Я задал этот вопрос раньше - Что делает флаг JVM CMSClassUnloadingEnabled?, но на этот раз он немного отличается!

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

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

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

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

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

Рич ps: Я знаю, что основной причиной проблем с перминными генераторами по-прежнему обычно является утечка Classloader, это больше о сообщении, которое создается JVM, если мы используем вышеуказанные параметры.

Ответы

Ответ 1

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