java.lang.OutOfMemoryError: PermGen space
Je suis d'erreur suivant fréquemment dans l'IDE eclipse 3.2, comment pourrais-je économiser de l'application de ces OutOfMemory?
java.lang.OutOfMemoryError: PermGen space
java.lang.ClassLoader.defineClass1(Native Method)
java.lang.ClassLoader.defineClassCond(Unknown Source)
java.lang.ClassLoader.defineClass(Unknown Source)
java.security.SecureClassLoader.defineClass(Unknown Source)
org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1814)
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:872)
org.jboss.web.tomcat.service.WebAppClassLoader.findClass(WebAppClassLoader.java:75)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1325)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204)
com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:289)
java.sql.DriverManager.getConnection(Unknown Source)
java.sql.DriverManager.getConnection(Unknown Source)
org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:133)
org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:111)
org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2101)
org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1325)
com.mfic.util.HibernateUtil.<clinit>(HibernateUtil.java:16)
com.mfic.dao.BaseHome.getSession(BaseHome.java:16)
com.mfic.core.helper.UserManager.findByUserId(UserManager.java:248)
com.mfic.core.action.Login.authenticate(Login.java:39)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:441)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:280)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:243)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
- double possible de Eclipse:java.lang.OutOfMemoryError: PermGen space
- marqué ceci comme un double de trois ans de moins question. Mieux de changer votre cible.
Vous devez vous connecter pour publier un commentaire.
Si vous avez l'interrogé erreur dans le secondaire Eclipse Application, l'ajout de
-XX:MaxPermSize=512m
dansini
ne va pas aider. Vous devez aller dansdebug or run configuration->arguments
et ajouter ce morceau en VM arguments.J'ai aussi augmenté les autres limites de la mémoire de la sorte:Il a aidé.
Modifier. Après quelques expériences, j'ai trouvé, qu'Eclipse n'prendre les limites de la mémoire à partir du fichier ini. Mais... il n'a qu'une seule fois, à la création d'un nouvel espace de travail. Les paramètres de -vmarg dans eclipse.ini créer de la valeur par défaut VM paramètres de la ligne. Donc, si vous travaillez sur l'espace de travail existant, changement de débogage ou de configuration d'exécution. Mais le changement de l'éclipse.ini, trop, pour un meilleur avenir.
-XX:MaxPermSize=512m
est plus que suffisant.-Xms120m -Xmx2048m -XX:MaxPermSize=1024m
œuvresVotre projet mange beaucoup de mémoire. Donner de l'Éclipse de plus de mémoire pour travailler avec. Edit
eclipse.ini
de modifier ou d'ajouter les lignes suivantes ci-dessous-vmargs
.En supposant que vous avez au moins 2 go de RAM.
Voir aussi:
eclipse.ini
-Xms64m -Xmx256m
Voir images ci-dessous:
Applications Java sont autorisés à utiliser uniquement la quantité limitée de mémoire. Le montant exact de la mémoire de votre application peut utiliser est spécifié durant le démarrage de l'application. Pour rendre les choses plus complexes, la mémoire Java est séparé de différentes régions, dont l'un appelé PermGen.
La taille de l'ensemble de ces régions est fixé lors du lancement de la JVM. Si vous ne définissez pas explicitement les tailles, de la plate-forme par défaut seront utilisées.
– La
java.lang.OutOfMemoryError: PermGen space
message indique que le Permanent de la Taille de la zone dans la mémoire est épuisée.Ce domaine spécifique appelé PemGen est dédié à la région où les classes Java sont chargées et stockées. Elle comprend les éléments suivants:
C'est assez bien. Certains plus de pièces et de morceaux, mais il n'a pas d'influence sur la consommation de mémoire de plus de quelques pour cent. Tous ces frais sont répartis dans la génération permanente et de rester dans la génération permanente.
Comme vous pouvez le voir, la génération permanente exigences de taille dépendent à la fois sur le nombre de classes chargées, ainsi que la taille de ces déclarations de classe. De sorte qu'il est facile de voir la principale cause de cette erreur: soit trop grand nombre de classes ou de trop grandes classes sont en cours de chargement pour la génération permanente.
Solution rapide pour des symptômes est facile si nous avons épuisé le PermGen zone dans le tas, nous avons besoin d'augmenter sa taille. Cette solution est en effet utile si juste n'avez pas donné votre JVM assez les coudes. Afin de modifier votre lancement de l'application de configuration et ajouter (ou l'augmenter si présent) le texte suivant:
Cela arrive assez fréquemment lors de l'exécution de Tomcat depuis Eclipse pendant les sessions de débogage etc. De mémoire, c'est un problème avec la JVM de Sun. Annnyway, il y a une solution facile:
Il suffit d'ajouter le suivant ci-dessous votre -vmargs dans eclipse.ini (qui se trouve dans le même répertoire que votre eclipse binaire):
Cela permettra un nettoyage plus agressive lors de l'exécution d'Eclipse, et est une solution plus élégante que de simplement les jeter plus de RAM à Eclipse.
Espérons que cette aide!
Les réponses ci-dessus probablement le résoudre pour vous, mais voici quelques intéressantes, des liens pertinents et de toute façon:
Voici un article avec beaucoup de discussion et suggestions à propos de cette erreur:
http://www.jroller.com/agileanswers/entry/preventing_java_s_java_lang
Discussion d'un exemple de la façon dont un Permgen OOM erreur peut se produire:
http://blogs.oracle.com/fkieviet/entry/classloader_leaks_the_dreaded_java
Ici est une solution réelle, posté sur StackOverflow récemment.
C'est pour Tomcat, mais peut être utilisable dans Eclipse:
Traitant de "la java.lang.OutOfMemoryError: PermGen space" erreur
Augmenter votre
MaxPermSize
dans votreeclipse.ini
. Je suggère un réglage à 128M 256M ou si vous êtes à l'aise avec la RAMÉgalement noter que beaucoup de personnes face PermGen problèmes avec Eclipse 3.2, comme signalé dans le Perm-Gen Erreurs Vous Déprime?. Et depuis Eclipse 3.2 est de plus de 4 ans, je vous suggère de mettre à niveau vers une version plus récente (Eclipse 3.6 est la version actuelle).
Références
Et aussi après avoir essayé les options ci-dessus, veuillez vérifier auprès de mise à jour de la JVM.
J'ai été en utilisant jdk1.6 et face au même problème.
Quand j'ai changé la jvm dans eclipse JDK1.7, il fonctionne très bien.