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
.