Теория про поколеняи и сборщики мусора
Ошибка PermGen происходит при переполнении памяти в постоянном (permanent) поколении.
Решение:
Использовать синхронизованый сборщик мусора
-XX:+UseConcMarkSweepGC
Указать, что сборщик мусора должен вызываться для объектов постоянного поколения
-XX:+CMSPermGenSweepingEnabled
Указать сборщику на выгрузку классов
-XX:+CMSClassUnloadingEnabled
Задать количество памяти, выделяемой под постоянное поколение, чтобы сборщик мусора не выгружал классы, необходимые для работы сервера приложений
-XX:MaxPermSize=128m