«Une erreur s'est produite lors de l'initialisation de la VM; Impossible de réserver suffisamment d’espace pour le tas d’objets »à l’aide de -Xmx3G


89

Tout d'abord, j'ai une boîte avec 8 Go de RAM, donc je doute que la mémoire totale soit le problème. 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 VM" dans les configurations d'exécution dans Eclipse.

Chaque fois que j'essaye de réserver plus de 1500 Mo, j'obtiens cette erreur: «Une erreur s'est produite lors de l'initialisation de la VM; Impossible de réserver suffisamment d’espace pour le tas d’objets »à l’aide de -Xmx3G

Qu'est-ce qui se passe ici?


2
Quelle version de java avez-vous? Sur quel système d'exploitation utilisez-vous?
Adam Rofer

C'était Win7, et j'avais 3 versions différentes de Java installées. L'un d'eux était le JRE 32 bits utilisé par Eclipse.
user1212731

3
N'oubliez pas de marquer une réponse comme correcte.
xdhmoore

Changez simplement le paramètre dans gridle.property avec votre espace sutaible
Bhushan

Réponses:


64

Serait-ce que vous utilisez un jvm 32 bits sur cette machine?


8
Désolé pour la question stupide, mais comment pourrais-je vérifier cela? Et comment puis-je utiliser le 64 bits?
user1212731

3
En fait, je viens d'essayer java -d64 -version dans la ligne de commande, et il est venu avec un serveur VM 64 bits.
user1212731

6
Apparemment, Eclipse utilisait la version 32 bits de JRE que j'avais installée précédemment, même si la version 64 bits était la dernière installation. J'ai modifié les paramètres dans Préférences -> JRE installés pour résoudre ce problème. Merci beaucoup pour votre réponse!
user1212731

3
dans tous les cas, 32 bits ne devraient-ils pas suffire pour adresser 4 Go?
Thomas

7
Cela devrait l'être, mais cela résout mon problème. Pas de vote pour cette réponse en raison du manque d'explication. Ce lien explique comment un jvm 32 bits ne peut pas dépasser 1 Go d'espace de tas maximum
Steven

57

Voici comment y remédier: Allez à 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é .


4
Juste une note pour les autres. Vous ajoutez une variable SYSTEM, pas une variable USER. J'ai rencontré ce problème dans Eclipse et je n'ai pas eu à redémarrer ma machine après avoir effectué les modifications ci-dessus ... Je n'avais qu'à redémarrer Eclipse. Merci!
captain_jim1

Pour les curieux, l'indicateur -Xmx dans _JAVA_OPTIONS spécifie la taille maximale autorisée du tas JVM. Cela empêche JVM de demander un espace déraisonnable (en particulier non allouable de manière contiguë pour les machines 32 bits ...)
varun

40

Ce n'est en fait pas un problème spécifique à Eclipse; c'est un problème général de Java sur Windows. C'est à cause de la façon dont la JVM alloue la mémoire sous Windows; il insiste sur l'allocation d'un bloc de mémoire contigu, que souvent Windows ne peut pas fournir, même s'il y a suffisamment de blocs séparés 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és sérieusement, donc je ne peux pas parler de leur efficacité. Une chose que j'ai parfois entendu dire qui pourrait aider est de redémarrer Windows et, avant de démarrer toute autre application, de lancer l'application Java qui a besoin de la grande partie de la mémoire. Si vous avez de la chance, Windows n'aura pas encore fragmenté son espace mémoire et Java obtiendra le bloc contigu demandé.

Quelque part sur les interwebs, il y a des explications et des analyses plus techniques sur ce problème, mais je n'ai aucune référence à portée de main.

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


2
Dans mon cas, votre réponse semble fonctionner. Je n'ai pas redémarré Windows mais j'ai essayé de fermer d'autres applications dans mes fenêtres, puis d'exécuter java et il a pu démarrer la VM.
sttaq

21

Tout d'abord, le JRE de 32 bits ne peut pas utiliser plus d'environ 1,5 Go de RAM. Donc, si vous en voulez plus, utilisez un JRE 64bits.

Deuxièmement, quand une nouvelle JVM démarre, cette somme la propriété -Xmx de toutes les JVM en cours d'exécution, et vérifiez s'il reste suffisamment de mémoire sur le système pour fonctionner sur leur propre -Xmx, si cela ne suffit pas, l'erreur se produit.


15

J'utilisais Liferay avec le serveur Tomcat d'Eclipse IDE. J'étais coincé avec cette même erreur en cliquant 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.



9

Assurez-vous qu'Eclipse exécute réellement la même JVM que vous pensez qu'elle exécute. Si vous utilisez java dans votre navigateur Web, vous avez probablement une version 32 bits flottante qui pourrait avoir la priorité si elle est installée ou mise à jour récemment.

Pour être absolument sûr, je recommande d'ajouter ces deux lignes à votre eclipse.inifichier en haut:

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

... où sur ma machine C:/Java/jdk1.6.0_27/binoù se trouve la JVM que je connais est 64 bits. Assurez-vous d'avoir le bindossier là-bas.

(En prime, sur Windows 7, cela vous permet également d'épingler l'onglet, c'est pourquoi j'ai dû le faire pour mon propre usage)


L'argument -vm doit pointer vers l'exécutable Java, pas seulement vers un dossier. Voir wiki.eclipse.org/%C2%A0eclipse.ini#Specifying_the_JVM
E-Riz


C'était bien le problème! Eclipse utilisait la version 32 bits de JRE que j'avais installée à un moment donné. Merci beaucoup pour la réponse et pour m'avoir conduit dans la bonne direction! J'apprécie énormément.
user1212731

@AdamRofer, ce bogue est intéressant, mais spécifiquement à propos de Windows 7 et pour contourner un problème d'épinglage d'Eclipse à la barre des tâches. En général, eclipse.ini devrait pointer vers l'exécutable java, bien que le lanceur Equinox semble être intelligent en ce sens qu'il recherchera un exécutable java si -vm pointe vers un dossier (sous Windows, au moins).
E-Riz

@ E-Riz "devrait" est trop strict à mon goût :) Espérons qu'ils résolvent le bogue sans avoir à changer l'argument vm un jour. Voici plus d'informations qu'il serait bon pour eux de mettre à jour sur leur eclipse.inipage: wiki.eclipse.org
Adam Rofer

5

C'est le problème de la taille du tas. Modifiez votre .bat(fichier Batch). Il peut afficher la taille du tas 1024. Changez-le en 512 Ensuite, cela devrait fonctionner.


2

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


2

Il suffit de mettre le #symbole devant org.gradle.jvmargs=-Xmx1536mdans gradle.properties

 # org.gradle.jvmargs=-Xmx1536m

Je ne sais pas comment cela a fonctionné en essayant Kotlin-multiplatform sur mac OS! en tout cas, merci!
Chintan Soni le

0

Vous essayez probablement de toute façon de mauvaises options. J'ai eu une erreur similaire avec le journal des erreurs de support:

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

L'une des raisons de ce problème est l'absence de mémoire disponible pour que Tomcat démarre. Essayez de supprimer le logiciel en cours d'exécution indésirable de Windows et redémarrez l'éclipse et le tomcat.


0

Je sais que je suis un peu en retard, mais voici ma réponse:

Je viens d'installer la version en ligne Java d'Oracle (pas la version 64 bits hors ligne).

Après avoir ajouté la variable JAVA_HOME ENV, cela a juste fonctionné!

J'espère que je pourrais aider :)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.