Java.lang.OutOfMemoryError: PermGen space [fermé]

je reçois souvent des erreurs de suivi dans eclipse IDE 3.2, Comment pourrais-je sauver 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)
29
demandé sur Gangnus 2010-09-19 03:58:51

8 réponses

si vous obtenez l'erreur remise en question dans L'application Eclipse secondaire, ajouter -XX:MaxPermSize=512m dans ini n'aidera pas. Vous devez aller dans debug or run configuration->arguments et ajouter cette pièce dans les arguments VM.J'ai aussi augmenté d'autres limites de mémoire ainsi:

-Dosgi.requiredJavaVersion=1.5 -Xms120m -Xmx2048m -XX:MaxPermSize=1024m

ça a aidé.

Edit. Après des expériences que j'ai trouvées, cette éclipse prend les limites de mémoire du fichier ini. Mais... il ne fait qu'une seule fois, à la création d'un nouvel espace de travail. Paramètres de-vmarg dans eclipse.ini créer la ligne de paramètres VM par défaut. Ainsi, si vous travaillez sur l'espace de travail existant, Modifiez la configuration de débogage ou d'exécution. Mais l'éclipse du changement.ini, aussi, pour un avenir meilleur.

35
répondu Gangnus 2012-05-31 08:23:49

Votre projet mange beaucoup de mémoire. Donnez à Eclipse plus de mémoire. Modifier eclipse.ini pour modifier ou ajouter les lignes suivantes sous -vmargs .

-Xms256m
-Xmx512m
-XX:MaxPermSize=512m

si vous avez au moins 2 Go de mémoire vive.

voir aussi:

20
répondu BalusC 2010-09-19 00:08:07
  • cliquez sur l'instance du serveur.
  • Ouvrir Des Configurations De Lancement.
  • augmenter la mémoire à JVM,dans l'onglet argument.

- Xms64m -Xmx256m

voir les images ci-dessous:

enter image description here

16
répondu Chand Priyankara 2013-05-29 09:57:27
Les applications Java

ne peuvent utiliser qu'une quantité limitée de mémoire. La quantité exacte de mémoire que votre application particulière peut utiliser est spécifiée lors du démarrage de l'application. Pour rendre les choses plus complexes, la mémoire Java est séparée en différentes régions, dont L'une est appelée PermGen.

La taille

de toutes ces régions est définie 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.

So – le message java.lang.OutOfMemoryError: PermGen space indique que la zone de taille permanente dans la mémoire est épuisée .

cette zone spécifique appelée PemGen est une région dédiée où les classes Java sont chargées et stockées. Il se compose des éléments suivants:

  • noms des classes
  • champs de la classe
  • méthodes d'une classe avec le bytecode des méthodes
  • Constante de la piscine de l'information
  • tableaux D'objets et tableaux de types associés à une classe
  • optimisations du compilateur juste à temps

c'est à peu près tout. Un peu plus de bits et pièces, mais il n'a pas d'impact sur la consommation réelle de mémoire de plus de quelques pour cent. Tous ceux-ci sont attribués dans la génération permanente et restent dans la génération permanente.

Comme vous pouvez le voir, le permanent les exigences de taille de génération dépendent à la fois du nombre de classes chargées et de la taille de ces déclarations de classe. Il est donc facile de voir la cause principale d'une telle erreur: soit trop de classes ou des classes trop grandes sont chargées à la génération permanente .

solution rapide pour les symptômes est facile - si nous avons épuisé la zone PermGen dans le tas, nous devons augmenter sa taille. Cette solution est en effet utile si vous n'avez tout simplement pas donné votre JVM assez les coudes. Ainsi, Modifiez la configuration de lancement de votre application et ajoutez (ou augmentez s'il y a lieu) ce qui suit:

-XX:MaxPermSize=512m
5
répondu Ivo 2015-05-06 21:41:39

cela se produit assez fréquemment lors de L'exécution de Tomcat inside Eclipse lors de sessions de débogage, etc. De mémoire, C'est un problème avec le Sun JVM. Annnyway, il y a une solution facile:

il suffit d'ajouter ce qui suit sous votre-vmargs dans eclipse.ini (qui est dans le même répertoire que votre binaire eclipse):

-XX:+UseConcMarkSweepGC
-XX:+CMSClassUnloadingEnabled
-XX:+CMSPermGenSweepingEnabled 

cela permettra une collecte des ordures plus agressive lors de la course Eclipse, et est une solution plus élégante que juste jeter plus RAM à Eclipse.

Espérons que cette aide!

2
répondu Sam Day 2010-09-19 00:09:23

les réponses ci-dessus le résolvent probablement pour vous, mais voici quelques liens intéressants pertinents 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 une erreur Permgen OOM peut se produire: http://blogs.oracle.com/fkieviet/entry/classloader_leaks_the_dreaded_java

Voici une VRAIE solution, récemment publiée sur StackOverflow. Il est pour Tomcat mais peut être utilisable dans Eclipse: Traitant de "la java.lang.OutOfMemoryError: PermGen space "error

2
répondu Beel 2017-05-23 11:33:16

Augmentez votre MaxPermSize dans votre eclipse.ini . Je suggère de le régler à 128M ou 256M si vous êtes à L'aise avec RAM

-vmargs -XX:PermSize=64M -XX:MaxPermSize=128M  

notez aussi que beaucoup de gens ont eu des problèmes de PermGen avec Eclipse 3.2 comme rapporté dans les erreurs de Perm-Gen vous ont fait tomber? . Et puisque Eclipse 3.2 a plus de 4 ans, je suggère une mise à niveau vers une version plus récente (Eclipse 3.6 est la version actuelle).

références

1
répondu Pascal Thivent 2010-09-19 00:14:57

et aussi après avoir essayé les options ci-dessus, s'il vous plaît vérifier avec JVM mise à jour. J'utilisais jdk1.6 et fait face au même problème. Quand j'ai changé le jvm d'eclipse en JDK1.7, it is working fine.

1
répondu Anand Kumar 2013-01-12 04:23:58