Les segments de mémoire natifs et Java

La machine virtuelle Java gère deux zones de mémoire, le segment de mémoire Java™ et le segment de mémoire natif (ou système). Ces deux tas ont des rôles différents et sont gérés par des mécanismes différents.

Le segment de mémoire Java contient les instances des objets Java et est souvent appelé'segment de mémoire'. Il s'agit du segment de mémoire Java géré par la récupération de place, et il s'agit du segment de mémoire Java qui est modifié par les paramètres de segment de mémoire de ligne de commande. Le segment de mémoire Java est alloué à l'aide de mmap ou shmat si la prise en charge des grandes pages est demandée. La taille maximale du segment de mémoire Java est préallouée lors du démarrage de la machine virtuelle Java en tant que zone contiguë, même si la taille minimale du segment de mémoire est inférieure. Cette allocation permet à la limite artificielle de taille du tas imposée par le paramètre de taille minimum de se rapprocher de la limite de taille réelle avec l'expansion du tas. Pour plus d'informations, voir Gestion de la mémoire dans le document J9 VM reference .

Le segment de mémoire natif ou système est alloué à l'aide des mécanismes malloc et free sous-jacents du système d'exploitation et est utilisé pour l'implémentation sous-jacente d'objets Java particuliers, par exemple:
  • Objets Motif requis par AWT et Swing
  • Tampons pour les routines de compression de données, qui sont l'espace mémoire requis par les bibliothèques de classes Java pour lire ou écrire des données compressées telles que des fichiers .zip ou .jar.
  • Allocations malloc par le code JNI de l'application
  • Code compilé généré par le compilateur Just In Time (JIT)
  • Unités d'exécution à mapper aux unités d'exécution Java