web-dev-qa-db-fra.com

Message "mémoire insuffisante pour Java Runtime Environment" dans eclipse

Lorsque j'exécute mon code Java dans Eclipse, le message suivant s'affiche:

There is insufficient memory for the Java Runtime Environment to continue.
Native memory allocation (malloc) failed to allocate 4088 bytes for AllocateHeap
An error report file with more information is saved as:
E:\Eclipse_Workspace\BTest\hs_err_pid1888.log

J'ai 4 Go RAM sur mon ordinateur. J'ai aussi changé mon JRE de 1.7 à 1.8. Mais le problème ne semble pas résolu. J'utilise un système Windows 8 avec un processeur i3 et dispose d'environ 20 Go d'espace disque libre sur mon lecteur C. 

Version Eclipse: Service Eclipse Juno version 2

Je reçois aussi ce message au démarrage d’Eclipse. J'ai joint la capture d'écran du message d'erreur.

Quelle est la cause de ce problème?

enter image description here

Paramètres de mémoire dans le fichier "Eclipse.ini":

-startup
plugins/org.Eclipse.equinox.launcher_1.3.0.v20120522-1813.jar
--launcher.library
plugins/org.Eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20120913-144807
-product
org.Eclipse.epp.package.Java.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.Eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Dhelp.lucene.tokenizer=standard
-Xms40m
-Xmx512m

Résolution: Réinstaller Eclipse a résolu le problème.

27
Balaram26

Le message ci-dessus signifie que vous exécutez tellement de programmes sur votre PC qu'il ne reste plus de mémoire pour en exécuter un. Ce n'est pas un problème Java et aucune option Java ne va changer cela.

Utilisez le Gestionnaire des tâches de Windows pour voir quelle quantité de votre RAM 4 Go est en réalité libre . Je suppose que quelque part, vous avez un programme qui mange toute la mémoire. Trouvez-le et tuez-le.

EDITVous devez comprendre qu'il existe deux types d'erreurs "mémoire insuffisante".

Le premier est l'exception OutOfMemoryException que vous obtenez lorsque le code Java est en cours d'exécution et que Java heap n'est pas assez volumineux. Cela signifie que Java code demande à Java runtime de la mémoire. Vous pouvez les corriger avec -Xmx...

L'autre erreur survient lorsque Java runtime manque de mémoire. Ce n'est pas lié au tas Java du tout. Ceci est une erreur lorsque Java demande plus de mémoire au système d'exploitation et que celui-ci dit: "Désolé, je n'en ai pas."

Pour réparer ce dernier, fermez les applications ou redémarrez (pour nettoyer la fragmentation de la mémoire).

41
Aaron Digulla

Comment diagnostiquer cette erreur même en exécutant la commande simple:

Java -version
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Cannot create GC thread. Out of system resources.
# An error report file with more information is saved as:
# /home2/ericlesc/code/Java/c2/hs_err_pid23944.log

Vérifiez la quantité de mémoire disponible dont vous disposez:

free -m
             total       used       free     shared    buffers     cached
Mem:         28119      26643       1475        189       2391      15368
-/+ buffers/cache:       8884      19235
Swap:         5117         34       5083

Vérifiez le nombre maximum de processus utilisateur, assurez-vous de ne pas dépasser la limite:

ulimit -a

ps -ef | wc -l

Pour moi, cela s’explique par le fait que PHP avait consommé trop de mémoire sur bluehost et que j’étais capable de le réparer, sans redémarrer PHP ou le serveur ( Je ne peux pas) était de prendre le répertoire public_html et de le renommer. Et laissez une minute pour PHP pour voir le changement, puis renommez-le. 

Un bug dans le moteur php lui-même. J'ai trouvé un moyen astucieux de donner un coup de pied rapide au moteur PHP.

(mise à jour février 2016) (Je reçois un pic de votes positifs à ce sujet, car l'instance Bluehost PHP, les moteurs réservent toute la mémoire et n'en laissent aucune à la JVM. Pour leur défense, PHP est en train de devenir une machine rube Goldberg impure. Bluehost en tant que service est en déclin.

9
Eric Leschinski

Si vous utilisez une machine virtuelle (VM), allouez plus de RAM à votre VM et votre problème sera résolu.

3
AMIT GURBANI

Dans votre répertoire d'installation Eclipse, vous devriez pouvoir trouver le fichier Eclipse.ini. Ouvrez-le et trouvez la section -vmargs. Ajustez la valeur de:

-Xmx1024m

Dans cet exemple, il est défini sur 1 Go.

1
Harmlezz

Essayez de modifier votre Eclipse.ini avec ci-dessous

-startup
plugins/org.Eclipse.equinox.launcher_1.3.0.v20120522-1813.jar
--launcher.library
plugins/org.Eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20120913-144807
-product
org.Eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
512M
-showsplash
org.Eclipse.platform
--launcher.XXMaxPermSize
512m
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Dhelp.lucene.tokenizer=standard
-Xms2G
-Xmx3G
-XX:MaxPermSize=2G
-XX:+UseCompressedOops
-XX:+UseParallelGC

Une fois que vous ouvrez votre Eclipse, vous pouvez essayer ci-dessous

On dirait que votre application consomme plus de mémoire que celle allouée (par défaut). Je vais essayer deux choses

  1. Comme suggéré par Harmlezz, augmentez la quantité de mémoire allouée à la machine virtuelle Java à -Xms2g -Xmx2g (si nécessaire, augmentez-la davantage et essayez-la)

  2. Téléchargez l'analyseur de mémoire Eclipse et recherchez la cause de la fuite de mémoire OR même si vous pouvez utiliser JConsole pour voir l'utilisation de la mémoire par la JVM afin de résoudre le problème de fuite de mémoire de l'application.

1
Mind Peace

Votre application (Eclipse) a besoin de plus de mémoire et JVM n’alloue pas assez. Vous pouvez augmenter la quantité de mémoire allouée par JVM en suivant les réponses fournies ici

0

Vous devez diagnostiquer les utilisations de JVM, telles que le nombre de processus en cours et l’affectation de tas. il y a beaucoup de façons de le faire, par exemple

  • vous pouvez utiliser Java jcmd pour vérifier le nombre d’objets, la taille de la mémoire (pour Linux vous pouvez utiliser par exemple "/usr/jdk1.8.0_25/bin/jcmd 19628 GChistorique_class>> tmp/19628_ClassHistogram_1.txt", ici 19628 l'identifiant du processus de l'application en cours). Vous pouvez facilement vérifier si une référence forte existe dans votre code ou autre.
0
rab

Si vous êtes sur ec2 et que vous voulez faire mvn build, utilisez l'option -T qui indique à maven d'utiliser le nombre de threads tout en faisant

par exemple: mvn -T 10 clean package

0
R Karwalkar