Il existe plusieurs types de mémoire présents dans la JVM de Java.
Heap memory
La heap memory est la mémoire principale, contenant les objets créés par l’application.
La taille de la mémoire est configurable par les options -Xms
et -Xmx
, exemple :
java -Xms4096M -Xmx6144M ClassName
Java utilise un Garbage collector pour le nettoyage de sa heap : Java - Garbage collector
Stack memory
La stack memory stocke les variables locales et les informations des méthodes mais aussi les threads d’exécution.
Elle n’est pas gérée par le Garbage collector mais par la JVM directement.
Native Memory
L’allocation de mémoire à l’extérieur de la heap Java est utilisée par la JVM, aussi appelée off-heap memory.
Utilisée pour réaliser la sérialisation en lecture et écriture. Les performances dépendent du buffer, du processus de sérialisation et de l’espace disque.
La JVM stocke les stacks de thread, les données Internet et les memory mapped files.
Direct Memory
Allocation en dehors de la Java heap. Ça représente la mémoire utilisée sur l’OS par le processus de la JVM.
Java NIO utilise cette mémoire pour écrire les données sur le réseau ou les disques.
On peut limiter la taille du direct buffer memory en utilisant ce paramètre :
-XX:MaxDirectMemorySize=1024M
Source:
- Memory Types in JVM https://www.baeldung.com/java-jvm-memory-types