Impossible de réserver suffisamment d’espace pour que le tas d’objects puisse démarrer la JVM

Juste confronté à 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 à 128m, j’obtiens à nouveau l’erreur.

En utilisant la commande top et free -m je peux voir que j’ai obtenu plus de 192 Mo de libre, alors pourquoi j’ai toujours cette erreur?

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

Je vous remercie

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

La JVM tente peut-être d’allouer un grand bloc contigu de 64 Mo de mémoire. Les 192 Mo que vous avez gratuitement 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 stack plus petite, par exemple:

 java -Xms16m ... 

J’ai eu le même problème en utilisant une version 32 bits de Java dans un environnement 64 bits. En utilisant 64 java dans un OS 64, ça allait.

Selon cet article, ce message d’erreur signifie:

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

Edit: Heap n’est pas la seule mémoire réservée, je suppose. Au moins, il existe d’autres parameters JVM tels que PermGenSpace qui demandent de la mémoire. Avec une taille de segment de mémoire de 128M et un PermGenSpace de 64M, vous remplissez déjà l’espace disponible.

Pourquoi ne pas réduire les autres parameters de mémoire pour libérer de l’espace pour le tas?