2009-02-10 6 views
2

J'ai une application d'entreprise avec EJB. La taille totale de l'application est de 34 méga-octets. Lorsque je déploie mon application, tout va bien, mais lorsque je le redéploie, le nombre total de classes chargées augmente. J'utilise visualVM pour voir cette information. Donc c'est comme ça que ça devrait être ou c'est une fuite de mémoire. Comment résoudre ce problème? MerciNombre total de classes chargées dans Glassfish

Répondre

6

Vous avez une fuite de classloader!

Vous constaterez généralement que lorsque vous déployez une application sur sur un serveur d'applications JavaEE (y compris Glassfish), le serveur d'applications crée un nouveau chargeur de classe spécifique à votre application. Lorsque votre application est initialisée et qu'elle s'exécute, ce chargeur de classe chargera de nouvelles classes, qui seront placées dans la mémoire permanente, appelée région PermGen. Lorsque l'application n'est pas déployée, ce classloader est supposé être récupéré par les ordures, mais parfois cela ne se produit pas car quelque chose provoque la persistance de la référence. Lorsque vous redéployez votre application, le serveur d'applications passe par les mêmes mouvements qu'avant, mais maintenant, il y a moins de mémoire disponible.

Pour plus d'informations à ce sujet, jetez un oeil à l'article de blog Frank Kieviet appelé Classloader Leaks et la suite sur How to Fix Classloader Leaks.