[JAVA] Gestion de mémoire des Java Virtual Machine (JVM)

java jvm memory

Les JVM sont des machines virtuelles qui vont vous permettre d’exécuter vos codes sources Java.

Ces machines virtuelles java nécessite qu’on leur alloue de la mémoire afin qu’elles puissent exécuter correctement le code Java.

Si vous rencontrez un message d’erreur tel que celui là, c’est que vous avez rencontré un problème lors de l’allocation de la mémoire:

Error occurred during initialization of VM
Could not reserve enough space for object heap

Nous allons essayer de comprendre la gestion de la mémoire utilisée par une JVM: heap, stack, -xss, -xms, -xmx, -xmn, …

Quantité maximale de mémoire utilisable par une JVM (32 Bits / 64 Bits)

Tout d’abord, il faut savoir que vous ne pourrez pas allouer la même quantité de mémoire à vos JVM suivant que votre système d’exploitation est 32 Bits ou 64 Bits.

En effet, sur les systèmes 32 Bits, la quantité de mémoire disponible est au maximum de 4Gb.
Une fois la mémoire utilisée par le système d’exploitation retirée, il ne vous en restera plus que 2Gb (environ) de RAM disponible.
Vous pourrez tout de même en utiliser un peu plus si vous disposez de mémoire paginée.

Sur les systèmes d’exploitation 64 Bits, les limites sont définies par votre matériel (quantité de RAM installée et disponible).

Généralement, une JVM n’utilise pas plus de 1.5Gb de mémoire.

Utilisation de la mémoire par une JVM

Le schéma suivant explique l’utilisation de la mémoire par une JVM:

Java JVM Memory

Java JVM Memory

JVM: les options du Java Heap

Le Java Heap est un espace mémoire continu dans lequel sont stockés tous les objets utilisés par votre code.
Les options suivantes permettent de configurer l’utilisation de la mémoire par le Java Heap de votre Java Virtual Machine:

  • -Xmx: taille maximale du Heap (ex: -Xmx1024).
  • -Xms: taille minimale du Heap. Attention sur les systèmes 32 Bits à ne pas utiliser trop de mémoire.
  • -Xmn: taille du heap pour la génération courte. Pour rappel, la génération courte représente tous les objets qui ont une durée de vie courte. Ces objets sont stockés dans un emplacement mémoire qui est fréquemment traité par le garbage collector. La taille recommandée est 33% de l’espace mémoire alloué au Java Heap.
  • -XX:NewRatio: fonctionne comme le Xmn sauf qu’on lui passe un pourcentage. -XX:NewRatio=3 permet d’allouer un tiers des ressources à la génération courte.
  • -XX:NewSize: taille allouée au démarrage pour la génération courte. Valeur calculée automatiquement si rien n’est renseigné.
  • -XX:MaxNewSize: taille maximale autorisée pour la croissance de l’espace attribué à la génération courte. Pas de limite si le paramètre n’est pas précisé.
  • -XX:MinHeapFreeRatio: Quantité de mémoire libre qui toujours être disponible. 40% par défaut. JVM will allocate memory to always have as minimum 40% of free memory. When -Xmx = -Xms, it’s useless.
  • -XX:MaxHeapFreeRatio: Idem que -XX:MinHeapFreeRatio sauf que cela réduit l’espace disponible si trop de mémoire est allouée. 70% par défaut.

J’espère que ces informations vous serviront 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *