Это утечка памяти загрузчика классов.Каждый раз, когда вы повторно развертываете приложение, для него создается новый загрузчик классов, и все классы вашего приложения загружаются снова.Это потребляет память в пространстве perm gen.
Старый загрузчик классов и все его загруженные классы должны быть собраны сборщиком мусора, иначе вы в конечном итоге столкнетесь с OOME в пространстве PermGen после многократного развертывания.Это не работает, если объект, загруженный внешним загрузчиком классов, содержит ссылку на любой объект, загруженный старым загрузчиком классов. Эта статья дает хорошее объяснение проблемы.
Как правило, утечки загрузчика классов трудно анализировать, а иногда трудно исправить.Чтобы выяснить, почему старые загрузчики классов не являются сборщиком мусора, вы должны использовать профилировщик.В JProfiler используйте обходчик кучи, выберите объекты загрузчика классов glassfish и используйте представление входящих ссылок для проверки путей к корням сборщика мусора.
Класс загрузчика классов называется org.apache.servlet.jasper.JasperLoader
.Вот снимок экрана обычной ситуации, когда загрузчик классов удерживается только живыми экземплярами загруженных объектов.
В вашей ситуации вы должны видеть ссылки со сторонних объектов.Другой распространенной причиной утечки загрузчика классов в веб-контейнерах является фоновый поток, который не останавливается.Например, в Google Guice есть такая ошибка в версии 3.0.
(Отказ от ответственности: моя компания разрабатывает JProfiler)