web-dev-qa-db-fra.com

Impossible de réserver suffisamment d'espace pour le tas d'objets

Je reçois l'exception suivante plusieurs fois chaque fois que j'essaie d'exécuter le programme.

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

Impossible de créer la machine virtuelle Java.

J'ai essayé d'augmenter ma mémoire virtuelle (taille de la page) et RAM taille, mais en vain. Quelqu'un peut-il me dire comment puis-je éliminer cette erreur?

250
Narendra

Exécutez la machine virtuelle Java avec -XX:MaxHeapSize=512m (ou un grand nombre à votre guise) (ou -Xmx512m en bref)

200
Bozho

Cela peut également être provoqué par la définition d'un paramètre trop grand sur une machine virtuelle HotSpot 32 bits, par exemple:

-Xms1536m -Xmx1536m

où ceci pourrait/voudrait fonctionner:

-Xms1336m -Xmx1336m
119
djangofan

Je me suis heurté à cela lors de l'utilisation de javac, et il ne semble pas capter les options de ligne de commande,

-bash-3.2$ javac -Xmx256M HelloWorldApp.Java 
Error occurred during initialization of VM
Could not reserve enough space for object heap
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

de sorte que la solution ici il donc mis _Java_OPTIONS

-bash-3.2$ export _Java_OPTIONS="-Xmx256M"
-bash-3.2$ javac HelloWorldApp.Java 
Picked up _Java_OPTIONS: -Xmx256M

Et cela compile bien.

Cela m’arrive sur des machines avec beaucoup de RAM, mais avec des ulimits de mémoire plus faibles. Java décide d'allouer un gros segment car il détecte le bélier dans la machine, mais il n'est pas autorisé à l'allouer à cause des ulimits.

43
Jens Timmerman

voici comment y remédier:

  • Allez dans Démarrer-> Panneau de configuration-> Système-> Avancé (onglet) -> Variables d'environnement-> Système

    Variables-> Nouveau: Nom de la variable: _Java_OPTIONS Valeur de la variable: -Xmx512M Nom de la variable: Path
    Valeur de la variable: %PATH%;C:\Program Files\Java\jre6\bin;F:\JDK\bin;

Changez ceci en votre chemin approprié.

40
Mohamed Adel

Java 32 bits requiert de l’espace libre en mémoire pour fonctionner. Si vous spécifiez une taille de segment importante, il se peut qu'il n'y ait pas autant d'espace libre contigu en mémoire, même si vous disposez de beaucoup plus d'espace libre que nécessaire.

L'installation d'une version 64 bits de Java facilite dans ces cas-là, la configuration requise en matière de mémoire contiguë ne s'applique qu'à Java 32 bits.

30
JohnEye

Combiné avec -Xmx512M, utilisez -d64 pour vous assurer que vous utilisez une machine virtuelle 64 bits. Sur une machine 64 bits, je pensais être sûr d’exécuter une machine virtuelle 64 bits, mais non. Après avoir installé Java 64 bits, l'option -d64 fonctionne et -Xmx autorise des tailles de mémoire beaucoup plus grandes.

Java -d64 -Xmx512M mypackage.Test
26
Axl

J'ai eu la même erreur, et résolu cela en configurant le fichier run.conf.bat

Exécuter la machine virtuelle Java avec la configuration run.conf.bat dans Jboss5x

Si de la mémoire libre n'est pas disponible alors que vous transmettez l'instruction, veuillez apporter des modifications dans run.conf.bat.

set "Java_OPTS=-Xms512m -Xmx512m -XX:MaxPermSize=256m
14
Ankam shyamsundar

Je sais qu'il y a déjà beaucoup de réponses ici, mais aucune d'entre elles ne m'a aidé. Finalement, j'ai ouvert le fichier /etc/elasticsearch/jvm.options et j'ai changé:

-Xms2G
-Xmx2G

à

-Xms256M
-Xmx256M

Cela l'a résolu pour moi. Espérons que cela aide quelqu'un d'autre ici.

8
kramer65

Erreur :

Pour l'erreur, "une erreur s'est produite lors de l'initialisation de vm n'a pas pu réserver assez d'espace pour l'objet tas jboss"

Cause première :

  • Allocation de mémoire incorrecte/insuffisante sur notre machine virtuelle Java, comme indiqué ci-dessous.

  • par exemple. Java_OPTS = "- XMS1303m -Xmx1303m -XX: MaxPermSize = 256m" dans jboss-eap-6.2\bin\standalone.conf ou "Java_OPTS = -Xms1G -Xmx1G -XX: MaxPermSize = 256M " dans jboss-eap-6.2\bin\standalone.conf.bat qui n’est autre que les paramètres du pool d’allocation de mémoire JVM.

Résolution:

  • Augmentez la taille du tas. Pour augmenter la taille du tas,
  • goto -> jboss-eap-6.2\bin\standalone.conf.bat ou jboss-eap-6.2\bin\standalone.conf
  • change -> Java_OPTS = "- Xms256m -Xmx512m -XX: MaxPermSize = 256m" où -Xms correspond à la taille de segment minimale et -Xmx à la taille de segment maximale.
  • Habituellement, il n'est pas recommandé d'avoir la même taille pour min et max.

  • Si vous exécutez votre application à partir d’Eclipse,

  • Double-cliquez sur le serveur
  • sélectionnez 'Ouvrir la configuration de lancement', vous serez redirigé vers la fenêtre 'Modifier les propriétés de la configuration de lancement'.
  • Dans cette fenêtre, accédez à l'onglet '(x) = Arguments'.
  • Dans VM Arguments, définissez la taille de votre segment de mémoire comme indiqué ci-dessous.
  • "-Dprogram.name = JBossTools: Serveur d'exécution JBoss EAP 6.1+" "serveur" -Xms256m -Xmx512m -XX: MaxPermSize = 256 m -Dorg.jboss.resolver.warning = true
6
Prabhakar

Supposons que votre classe s'appelle Test dans le package mypackage. Exécutez votre code comme ceci:

Java -Xmx1024m mypackage.Test

Cela réservera 1024 Mo d'espace disque pour votre code. Si vous voulez 512 Mo, vous pouvez utiliser:

Java -Xmx512m mypackage.Test

Utilisez petit m dans 1024m, 512m, etc.

6
euphoria83

Parfois, cette erreur indique que la mémoire physique et l'échange sur le serveur sont pleinement utilisés!

Je voyais ce problème récemment sur un serveur exécutant RedHat Enterprise Linux 5.7 avec 48 Go de RAM. J'ai trouvé que même en cours d'exécution

Java -version

a provoqué la même erreur, ce qui a permis d'établir que le problème n'était pas spécifique à mon application.

Fonctionnement

cat /proc/meminfo

ont signalé que MemFree et SwapFree étaient tous deux nettement inférieurs à 1% des valeurs de MemTotal et de SwapTotal, respectivement:

MemTotal:     49300620 kB
MemFree:        146376 kB
...
SwapTotal:     4192956 kB
SwapFree:         1364 kB

L’arrêt de quelques autres applications en cours d’exécution sur la machine a eu pour effet d’ajouter un peu de mémoire:

MemTotal:     49300620 kB
MemFree:       2908664 kB
...
SwapTotal:     4192956 kB
SwapFree:      1016052 kB

À ce stade, une nouvelle instance de Java devrait démarrer correctement et j'ai pu exécuter mon application.

(Évidemment, pour moi, il ne s’agissait que d’une solution temporaire; j’ai encore du mal à faire un examen plus approfondi des processus en cours sur cette machine pour voir s’il est possible de faire quelque chose pour réduire les niveaux d’utilisation nominale de la mémoire, sans avoir à arrêter des applications)

6
Jon Schneider

J'ai eu des problèmes similaires. J'avais installé la version 32 bits de Java sur une machine 64 bits.

En désinstallant cette version et en installant la version 64 bits de Java. J'ai pu résoudre le problème.

6
Manu Sharma

J'ai récemment fait face à ce problème. J'ai 3 applications Java qui commencent par une taille de segment de mémoire de 1024 m ou 1280 m. Java examine l'espace disponible dans l'échange. S'il n'y a pas assez de mémoire, jvm se ferme.

Pour résoudre le problème, je devais arrêter plusieurs programmes auxquels une grande quantité de mémoire virtuelle avait été allouée.

Je courais sur Linux x86-64 avec un JVM 64 bits.

3
codeDr

En supposant que vous disposiez de suffisamment de mémoire libre et que vous configuriez correctement les arguments de la machine virtuelle Java, vous pourriez avoir un problème de fragmentation de la mémoire. Vérifiez mémoire Java maximale sous Windows XP .

2
daramasala

Si vous utilisez une machine virtuelle Java 32 bits, modifiez la taille du segment en réduisant l’aide. Vous pouvez faire cela en passant les arguments à Java directement ou par le biais de variables d'environnement telles que:

Java -Xms128M -Xmx512M
Java_OPTS="-Xms128M -Xmx512M"

Pour une machine virtuelle Java 64 bits, une taille de segment supérieure telle que -Xms512M -Xmx1536M devrait fonctionner.

Exécutez Java -version ou Java -d32, Java--d64 pour Java7 pour vérifier la version que vous exécutez.

2
h--n

J'avais une bonne quantité de paramètres de mémoire, mais pour moi, il utilisait un intellij 64 bits avec jvm 32 bits. Une fois que je suis passé à la machine virtuelle 64 bits, l'erreur a disparu.

2
vsingh

Allez dans Démarrer-> Panneau de configuration-> Système-> Avancé (onglet) -> Variables d'environnement-> Variables système-> Nouveau:

Variable name: _Java_OPTIONS
Variable value: -Xmx512M
1
smoka

Quoi qu'il en soit, voici comment résoudre ce problème: Allez dans Démarrer-> Panneau de configuration-> Système-> Avancé (onglet) -> Variables d'environnement-> Variables système-> Nouveau: Nom de la variable: _Java_OPTIONS Valeur de la variable: -Xmx512M

OR

Modifiez l’appel de la fourmi comme indiqué ci-dessous.

   <exec
        **<arg value="-J-Xmx512m" />**
    </exec>

Cela a fonctionné pour moi.

1
Sudhakar

Une erreur s'est produite lors de l'initialisation de VM. Impossible de réserver suffisamment d'espace pour le tas d'objet de 1572864 Ko.

J'ai changé la valeur de la mémoire dans le fichier settings.grade 1536 à 512 et cela a aidé

1
Haris Durrani

Si vous exécutez un programme Java: - exécutez votre programme dans un terminal à l'aide de la commande correcte pour linux, il s'agit de 'Java -jar myprogram.jar' et ajoutez -Xms256m -Xmx512m, par exemple: ' Java -jar myprogram.jar Xms256m -Xmx512m '

Si vous exécutez un script .sh (linux, mac?) Ou un script .bat (windows), ouvrez le script et recherchez les options Java si elles sont présentes et augmentez la mémoire.

Si tout ce qui précède ne fonctionne pas, vérifiez vos processus (ctrl + alt + suppression sous Windows) (ps aux sur linux/mac) et supprimez les processus qui utilisent beaucoup de mémoire et qui ne sont pas nécessaires pour votre système d'exploitation! => Essayez de réexécuter votre programme.

0
Fico

J'ai eu la même erreur et ça a été résolu quand j'ai supprimé les fichiers temporaires en utilisant% temp% et en redémarrant Eclipse.

0
Viswanath Nuggu

Dans CASSANDRA_HOME/bin/cassandra.bat, vous trouverez la configuration suivante

REM JVM Opts we'll use in legacy run or installation
set Java_OPTS=-ea^
 -javaagent:"%CASSANDRA_HOME%\lib\jamm-0.3.0.jar"^
 -Xms**2G**^
 -Xmx**2G**^

Vous pouvez réduire 2G à un nombre plus petit, par exemple. 1G ou même moins et cela devrait fonctionner.

Idem si vous utilisez un système Unix, modifiez le fichier .sh de manière appropriée.

0
Deepak Singhvi

Parfois, il se rapporte comme

$ sysctl vm.overcommit_memory
vm.overcommit_memory = 2

Si vous le configurez pour:

$ sysctl vm.overcommit_memory=0

Ça devrait marcher.

0
kay

Remplacez -Xmx2G par -Xms512M ou une taille de mémoire supérieure dans le fichier cassandra.bat du répertoire cassandra bin.

0
kiran