Почему постоянно увеличивается PermGen при перезагрузке приложения?

Рейтинг: 1Ответов: 1Опубликовано: 22.06.2011

Почему при перезагрузке web-приложения на сервер GlassFish постоянно увеличивается PermGen. И заодно сопутствующий вопрос: что находится в PermGen и для чего это?

Ответы

▲ 2Принят

В PermGen лежат данные, которые удаляются очень редко. Обычно, сборка в этой зоне не выполняется никогда. Однако, можно включить сборку в perm gen через... через какую-то опцию JVM.. что-то вроде -XX:+CMSPermGenSweepingEnabled или что-то в этом роде.

Чаще всего в PermGen лежат статические контексты классов и, собстсвенно, сами классы. Отюда и объяснение вашего исходного вопроса. Каждый раз когда вы перезагружаете приложение, создаётся новый контекст приложения.. с новыми классами, а старые застревают в permgen. Если включить сборку в permgen и включить class unload (тоже какая-то опция JVM), то есть шанс, что permgen будет чиститься. В то же время, есть вероятность, что это не поможет, в случае, если GlassFish держит эти классы и не отпускает.

Вообще, эта проблема достаточно известная и имеет место очень давно. Честно говоря, я никогда не придавал этому большого значения, так как на практике рестарт сервера не был проблемой. И вообще, обычно эта проблема всплывает при девелопменте.. и ничего страшного в том, чтобы всё положить на минутку.