Пространство PermGen - это то, что Tomcat использует для хранения определений классов (только определений, без экземпляров) и пулов строк, которые были интернированы. Исходя из опыта, проблемы пространства PermGen часто происходят в средах разработчиков, поскольку Tomcat должен загружать новые классы каждый раз, когда он развертывает WAR или делает jspc (при редактировании файла jsp). Лично я склоняюсь к развертыванию и повторному развертыванию войн, когда я нахожусь в тестировании dev, поэтому я знаю, что рано или поздно мне придется рано или поздно заканчиваться (в первую очередь потому, что циклы GC в Java по-прежнему выглядят как дерьмо, поэтому, если вы быстро и часто передираете свои войны достаточно, пространство заполняется быстрее, чем они могут управлять).
Это должно теоретически быть менее проблемой в производственных средах, поскольку вы (надеюсь) не меняете код на 10-минутной основе. Если это все еще происходит, это означает, что ваша кодовая база (и соответствующие зависимости в библиотеке) слишком велика для распределения памяти по умолчанию, и вам просто нужно возиться с распределением стека и кучи. Я думаю, что стандарты таких вещей, как:
-XX: MaxPermSize = SIZE Я обнаружил, однако лучший способ позаботиться о том, что для хорошего, чтобы позволить классам быть выгружены, чтобы ваш PermGen никогда не закончится:
-XX: + CMSClassUnloadingEnabled -XX: + CMSPermGenSweepingEnabled Такие вещи для меня в прошлом работали. Одна вещь заключается в существенном компромиссе с производительностью в использовании этих средств, поскольку прокрутки пергентов будут делать как 2 дополнительных запроса на каждый сделанный вами запрос или что-то в этом роде. Вам нужно сбалансировать свое использование с компромиссами.
Возможный дубликат [Как предотвратить ошибки пространства PermGen в Netbeans?] (Http://stackoverflow.com/questions/673646/how-can-i-prevent-permgen-space-errors-in-netbeans) – bummi