Ваш Tomcat настроен для автоматического повторного развертывания приложений, которые отбрасываются в папке приложения? Вы используете ту функциональность?
При использовании той функциональности существует возможность, что объем памяти, используемый в пространстве PermGen, собирается увеличиваться. Это может произойти из-за (плохо записанный) приложения, которые в некотором роде сохраняют ссылки на загруженные классы живыми. Каждый раз существует повторно развертывание, объем памяти, используемый в пространстве PermGen, собирается увеличиваться, пока это не переполняется.
Если бы Вы не используете ту функциональность и всегда имеете то же приложение, работающее на сервере Tomcat, то я просто попробовал бы рабочий Tomcat настройками по умолчанию для пространства PermGen. Если загрузки приложения, и хорошо работают некоторое время, то это должно быть прекрасным. Если выполнение приложения из пространства PermGen, то просто увеличивают его на шагах до пространства PermGen, является достаточно большим.
Почему это было настроено к 256 м (как замечено в Вашем другом вопросе) во-первых?
Btw, да, существует корреляция между суммой загруженных классов и суммой необходимого пространства в области PermGen. Так, да, чем больше кода, который загружается, тем больше PermGen располагает с интервалами, Вы собираетесь нуждаться.
Sun заявляет, что permgen является устройством хранения данных для объектов, которые не имеют эквивалентности на языке Java:
Третье поколение, тесно связанное со штатным поколением, является постоянным поколением. Постоянное поколение является особенным, потому что оно содержит данные, необходимые виртуальной машине для описания объектов, которые не имеют эквивалентности на уровне языка Java. Например, объекты, описывающие классы и методы, хранятся в постоянном поколении.
Так да постоянное поколение содержит "внутренние" структуры данных JVM, которые описывают объекты и методы, среди прочего. 256 МБ могли бы быть довольно большими, но это будет зависеть от приложения.
В большом приложении ColdFusion как я работаю, огромная сумма классов создаются для кода ColdFusion, который компилируется на лету, и я работаю с постоянным набором поколения к 192 МБ. Я думаю, что раньше выполнял его успешно на уровне 128 МБ также, таким образом, это - определенно что-то, с чем Вы могли экспериментировать.
Если Вы измерите уровень при загрузке прежде и после настройки этих параметров GC то Вы сможете сказать то, что влияет на Ваши изменения, имеют на производительности Вашего приложения.
Кроме того, документ, который я связал, дает большую информацию о том, как JVM справляется, это - память - это - довольно хорошее чтение.