web-dev-qa-db-fra.com

Impossible de réserver suffisamment d'espace pour que le tas d'objets démarre la JVM

Juste face à un problème étrange. Quand je tape

Java -version

j'ai eu

Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

.

Java -Xms64m -Xmx64m -version

Cette commande fonctionne bien

Java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) Client VM (build 19.1-b02, mixed mode)

Si je change xms, xmx en 128m, j'obtiens à nouveau une erreur.

Utilisation de la commande top et free -m Je peux voir que j'ai plus de 192 Mo de mémoire gratuite, alors pourquoi ai-je toujours cette erreur?

Mem:    262144k total,    64760k used,   197384k free,        0k buffers
Swap:        0k total,        0k used,        0k free,        0k cached

Merci

21
user12384512

Il semble que la machine sur laquelle vous essayez de l'exécuter ne dispose que de 256 Mo de mémoire.

Peut-être que la JVM essaie d'allouer un grand bloc contigu de 64 Mo de mémoire. Les 192 Mo dont vous disposez peuvent être fragmentés en morceaux plus petits, de sorte qu'il n'y a pas de bloc contigu de 64 Mo à allouer.

Essayez de démarrer votre programme Java avec une taille de segment de mémoire plus petite, par exemple:

Java -Xms16m ...
11
Jesper

J'ai eu le même problème lors de l'utilisation d'une version 32 bits de Java dans un environnement 64 bits. Lors de l'utilisation de 64 Java dans un système d'exploitation 64, c'était correct.

14
Yamada

Selon cet article ce message d'erreur signifie:

La taille du tas est supérieure à la mémoire physique de votre ordinateur.

Edit: Le tas n'est pas la seule mémoire réservée, je suppose. Au moins, il existe d'autres paramètres JVM comme PermGenSpace qui demandent la mémoire. Avec une taille de tas de 128 Mo et un PermGenSpace de 64 Mo, vous remplissez déjà l'espace disponible.

Pourquoi ne pas réduire les autres paramètres de mémoire pour libérer de l'espace pour le tas?

5
mico