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?
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.
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).
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.
Si vous utilisez une machine virtuelle (VM), allouez plus de RAM à votre VM et votre problème sera résolu.
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.
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
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)
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.
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
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
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