У меня та же проблема, когда я запускаю свое веб-приложение под tomcat или jetty.Постоянная память поколения используется для загрузки классов, и идея заключается в том, что «классы загружаются раз и навсегда».Поскольку я использую довольно много библиотек и Spring Framework, эта память заполняется очень быстро, особенно, когда я несколько раз повторно развертываю веб-приложение без перезапуска контейнера сервлета.
Я обнаружил, что увеличение максимального постоянного генерированиянедостаточноТакже необходимо разрешить сборке мусора удалять неиспользуемые классы во время выполнения, иначе он будет заполнен и выдает исключение пространства PermGen.Вот параметры JVM, которые я добавил для своих контейнеров сервлетов,
-XX:PermSize=128m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled
-XX:MaxPermSize
используется для установки максимального значения постоянной генерации.Это должно быть больше размера по умолчанию.
-XX:+CMSClassUnloadingEnabled
эта опция используется, чтобы позволить JVM выгрузить класс во время выполнения.По умолчанию выгрузка классов отключена.Для Java 5, пожалуйста, прочитайте this .
-XX:+UseConcMarkSweepGC
, чтобы опция загрузки классов работала, эта опция также должна быть установлена ( ref )
Кроме того, вы должны рассмотреть возможность обновления версии JVM.Java 5 слишком старая.