web-dev-qa-db-fra.com

“Une erreur s'est produite lors de l'initialisation de la machine virtuelle; Impossible de réserver suffisamment d'espace pour le tas d'objets "à l'aide de -Xmx3G

Tout d'abord, j'ai une boîte avec 8 Go de RAM, donc je doute que la mémoire totale est la question. Cette application fonctionne correctement sur les machines de 6 Go ou moins.

J'essaie de réserver 3 Go d'espace en utilisant -Xmx3G sous "Arguments de la VM" dans Exécuter les configurations dans Eclipse.

Chaque fois que j'essaie de réserver plus de 1 500 Mo, le message d'erreur suivant s'affiche: "Une erreur s'est produite lors de l'initialisation de la machine virtuelle; Impossible de réserver suffisamment d'espace pour le tas d'objets "à l'aide de -Xmx3G

Qu'est-ce qui se passe ici?

78
user1212731

Se pourrait-il que vous utilisiez un JVM 32 bits sur cette machine?

61
Laurent

Voici comment résoudre ce problème: Aller àStart->Control Panel->System->Advanced(tab)->Environment Variables->System

Variables->New:
Variable name: _Java_OPTIONS   
Variable value: -Xmx512M

Variable name: Path  
Variable value: ;C:\Program Files\Java\jre6\bin;F:\JDK\bin;  

Changez ceci en votre chemin approprié.

52
Mohamed Adel

Ce n'est en fait pas un problème spécifique à Eclipse; c'est un problème général de Java sur Windows. Cela tient à la façon dont la machine virtuelle alloue de la mémoire sous Windows. il insiste sur l'allocation d'un bloc de mémoire contigu, que Windows ne peut souvent pas fournir, même s'il y a suffisamment de morceaux distincts pour satisfaire la demande d'allocation. Il existe des utilitaires qui essaieront d'aider Windows à "défragmenter" sa mémoire, ce qui, en théorie, aiderait cette situation. mais je ne les ai pas vraiment essayées sérieusement, je ne peux donc pas parler de leur efficacité. Une chose que j'ai parfois entendu dire qui pourrait aider est de redémarrer Windows et, avant de lancer toute autre application, de lancer l'application Java qui nécessite une grande quantité de mémoire. Si vous avez de la chance, Windows n'aura pas encore fragmenté son espace mémoire et Java obtiendra le bloc contigu qui est demandé.

Quelque part sur les sites Web, il y a plus d'explications techniques et d'analyses sur cette question, mais je n'ai pas de références à portée de main.

J'ai trouvé cela, cependant, qui semble utile: https://stackoverflow.com/a/497757/63952

39
E-Riz

Premièrement, le JRE de 32 bits ne peut utiliser plus de 1,5 Go de RAM. Donc, si vous voulez plus, utilisez un JRE 64bits.

Deuxièmement, lors du démarrage d'une nouvelle machine virtuelle, additionnez la propriété -Xmx de toutes les machines virtuelles en cours d'exécution et vérifiez s'il reste suffisamment de mémoire sur le système pour s'exécuter sur leur propre -Xmx. Si l'erreur ne se produit pas, l'erreur se produit.

20
Daniel De León

J'utilisais Liferay avec le serveur Tomcat d'IDE Eclipse. J'ai été coincé avec cette même erreur au clic sur le démarrage du serveur. Double-cliquez sur le serveur d'Eclipse. il ouvre la page de présentation du serveur. Arguments de mémoire mis à jour de -Xmx1024m -XX: MaxPermSize = 256m à -Xmx512m -XX: MaxPermSize = 256m. Ensuite, cela fonctionnait pour moi.

15
Prathap

Assurez-vous qu'Eclipse exécute réellement la même machine virtuelle que vous pensez qu'il est en cours d'exécution. Si vous utilisez Java dans votre navigateur Web, vous avez probablement aussi une version 32 bits flottante qui pourrait être prioritaire si elle est installée ou mise à jour récemment.

Pour être absolument sûr, je vous recommande d’ajouter ces deux lignes à votre fichier Eclipse.ini en haut:

-vm 
C:/Java/jdk1.6.0_27/bin

... où sur ma machine C:/Java/jdk1.6.0_27/bin où se trouve la machine virtuelle Java que je connais est 64 bits. Assurez-vous d’avoir le dossier bin.

(En bonus, sur Windows 7, cela vous permet également de "brancher l'onglet", c'est pourquoi je devais le faire pour mon propre usage)

8
Adam Rofer

C'est la question de la taille du tas. Editez votre .bat (fichier batch). La taille du segment de mémoire peut être 1024. Changez-la en 512. Cela devrait alors fonctionner.

4
user1740626

J'ai également eu le même problème en utilisant Eclipse qui était en 32 bits et la JVM utilisée par elle était en 64 bits. Quand j'ai acheminé l'Eclipse vers la JVM 32 bits, cela a fonctionné

2
Ajit K'sagar

L'une des raisons de ce problème est qu'il n'y a pas de mémoire disponible pour le démarrage de Tomcat. Essayez de supprimer le logiciel en cours d'exécution non désiré de Windows et redémarrez Eclipse et Tomcat.

0
sooribabu

Vous essayez probablement de mauvaises options de toute façon. J'ai eu une erreur similaire avec la prise en charge du journal des erreurs:

Java HotSpot(TM) Client VM warning: ignoring option PermSize=32M; support was removed in 8.0
Java HotSpot(TM) Client VM warning: ignoring option MaxPermSize=128M; support was removed in 8.0

Dans mon cas, le logiciel ne supportait pas encore Java 8 (le script utilisait d'anciens arguments JVM) mais j'avais Java 8 par défaut.

0
Mateva