Question

Toutes les 15-30 minutes Netbeans montre un "java.lang.OutOfMemoryError: PermGen space". D'après ce que j'ai appris de Google cela semble être lié à des fuites de classloader ou des fuites de mémoire en général.

Malheureusement, toutes les suggestions que j'ai trouvé étaient liés aux serveurs d'applications et je ne sais pas pour les adapter à Netbeans. (Je ne suis même pas sûr que c'est le même problème)

Est-ce un problème dans ma demande? Comment puis-je trouver la source?

Était-ce utile?

La solution

Il est à cause de la charge constante de classe.

Java stocke code d'octet de classe et toutes les constantes (par exemple, les constantes de chaîne) en tas permanent qui ne sont pas les déchets collectés par défaut (qui ont du sens dans la majorité des situations, car les classes sont chargées qu'une seule fois au cours de la durée de vie d'une application).

Dans les applications qui se chargent souvent des classes au cours d'une vie entière qui sont:

  • les serveurs Web et d'application pendant le redéploiement à chaud;
  • de l'IDE lors de l'exécution des applications développées (à chaque fois que vous touchez le bouton Exécuter dans Netbeans ou éclipser charge les cours de votre application un nouveau);
  • etc ce comportement est incorrect parce qu'un tas remplit plein par la suite.

Vous devez activer la collecte des ordures en tas permanent pour éviter cette erreur.

J'utilise des options

-XX:MaxPermSize=256M
-XX:+CMSClassUnloadingEnabled
-XX:+CMSPermGenSweepingEnabled

(arrêté mon éclipse 3.4 de jeter "java.lang.OutOfMemoryError: PermGen space" il devrait aussi travailler avec NetBeans).

Modifier : Notez juste que pour Netbeans vous définissez ces options: [Netbeans installation]\etc\netbeans.conf Vous devriez préfixé ces options avec et les ajouter -J en netbeans_default_options (voir les commentaires à pour plus d'informations netbeans.conf).

Autres conseils

Essayez d'ajouter l'argument suivant à NetBeans netconf: -J-XX: MaxPermSize = 256m

Voir cette lien sur la façon de définir la taille de PermSize. Très probablement, ce n'est pas un problème de votre code, de sorte que la seule solution serait d'augmenter le la PermSize. J'ai trouvé que cela est assez souvent, lorsque vous travaillez avec JAXB. En général, si vous utilisez de nombreuses bibliothèques qui dépendent eux-mêmes aussi sur beaucoup d'autres fichiers jar, la taille par défaut de l'espace PermGen peut ne pas être assez grand.

Voir ces messages de blog pour plus de détails: Classloader fuites et Comment fixer le redoutée "java.lang.OutOfMemoryError: PermGen espace"

Si vous développez une application Web, essayez de mettre sur le serveur option vm

-Xmx512m -Xms512m -XX: MaxPermSize = 512m

Allez dans Outils / Serveurs // Plate-forme / options VM (Netbeans 7.4)

Vous pouvez modifier les options de démarrage de NetBeans machine virtuelle Java en éditant le fichier /etc/netbeans.conf. Je fais souvent ce genre d'erreurs lorsque je développe une WebApp et je déploie souvent. Dans ce cas, je redémarre tomcat de temps en temps.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top