Общее количество загруженных классов в Glassfish - PullRequest
2 голосов
/ 10 февраля 2009

У меня есть корпоративное приложение с EJB. Общий размер приложения составляет 34 мег. Когда я развертываю свое приложение, все в порядке, но когда я его повторно использую, количество загруженных классов увеличивается. Я использую visualVM, чтобы увидеть эту информацию. Так оно и должно быть или это утечка памяти. Как решить эту проблему? Спасибо

Ответы [ 2 ]

6 голосов
/ 10 февраля 2009

У вас утечка из загрузчика!

Обычно вы обнаружите, что при развертывании приложения на любом сервере приложений JavaEE (включая Glassfish) сервер приложений создаст новый загрузчик классов специально для вашего приложения. Когда ваше приложение инициализируется и запускается, этот загрузчик классов загрузит новые классы, которые будут помещены в постоянную память, называемую PermGen region.

Когда приложение не развернуто, этот загрузчик классов должен собираться мусором, но иногда этого не происходит, потому что что-то вызывает сохранение ссылки. Когда вы повторно развертываете свое приложение, сервер приложений выполняет те же действия, что и раньше, но теперь доступно меньше памяти.

Для получения дополнительной информации об этом, посмотрите Фрэнк Киевиет сообщение в блоге под названием Утечки в Classloader и последующие инструкции по Как устранить утечки в Classloader .

0 голосов
/ 11 февраля 2009

Visual VM - это всего лишь автономная версия средства «профилирования», включенного в Netbeans.

Итак, чтобы обнаружить утечку памяти, вы должны прочитать документацию для профилировщик Netbeans.

Вот несколько ссылок, с которых можно начать

...