Maison >Java >javaDidacticiel >Fonctionnalités avancées JVM--Introduction à la zone de structure de la mémoire Java
Division des régions :
Lors de l'exécution du programme, la machine virtuelle Java divise la mémoire en plusieurs zones avec différentes fonctions, comme indiqué ci-dessous :
Cette image répertorie les différentes zones de division de la mémoire, parmi lesquelles
Thread-private : compteur de programme, pile de machine virtuelle, local méthode Stack
Thread partagé : tas, zone de méthode
Ce qui suit présentera les fonctions et les fonctions de chaque zone une par une
Compteur de programme :
1. Le compteur de programme est principalement utilisé pour pointer vers le numéro de ligne de bytecode en cours d'exécution. Chaque thread a un compteur de programme distinct qui n'est pas partagé avec chacun. autre. En modifiant ce compteur Pointez sur le numéro de ligne du bytecode pour exécuter le programme
2. Les boucles, les sauts, la gestion des exceptions et d'autres mécanismes reposent tous sur ce compteur pour terminer
3. Si le Le programme exécute un programme Java, il pointe vers le bytecode en cours d'exécution. Si la méthode native est exécutée, sa valeur est vide
pile de machine virtuelle Java :
1. La pile de la machine virtuelle est privée au thread Chaque méthode créera un cadre de pile lors de l'exécution, qui est utilisé pour stocker des informations telles que les tables de variables locales, les sorties de méthode, les liens dynamiques, et les piles d'opérandes.,
2. Le processus d'exécution de chaque méthode est le processus d'une pile de machine virtuelle, de l'insertion à l'extraction
Beaucoup de gens disent souvent que la mémoire Java est divisée en tas. mémoire et mémoire de pile. La mémoire de pile fait référence à la pile de machine virtuelle
La table de variables locales mentionnée ci-dessus stocke principalement les types de données de base (intbytecharlong, etc.) connus du compilateur, les références d'objet et les types d'adresses de retour.
Extension :
Référence d'objet : Pas l'objet lui-même, il peut s'agir d'un pointeur de référence pointant vers l'adresse de départ de l'objet, il peut s'agir d'un handle représentant l'objet ou d'autres emplacements associés
returnaddress : n'est pas un type dans l'API Java et ne peut pas être appelé par nous. Il pointe vers l'adresse d'une instruction de bytecode
Local. pile de méthodes
Semblable à la pile de machines virtuelles, c'est la mémoire qui sert les méthodes natives
Tas Java
La mémoire tas est une mémoire partagée par thread. Son objectif principal est de stocker des objets et constitue également la zone principale gérée par le garbage collector.
Le tas Java est divisé en. la nouvelle génération et l'ancienne génération, en particulier sur le mécanisme de collecte des ordures, seront présentées dans les articles suivants
Zone de méthode (également appelée non-tas)
C'est aussi une mémoire partagée, utilisée pour stocker les informations de classe chargées, les constantes, les variables statiques, le code compilé par le compilateur juste à temps, etc.
Constante d'exécution pool : Il fait partie de la zone méthode et est utilisé pour stocker divers littéraux et symboles générés par le compilateur. Citation
Mémoire directe :
Il ne fait pas partie de la zone de données d'exécution de la machine virtuelle et n'appartient pas à la mémoire gérée par la JVM
Dans NIO, vous pouvez utiliser la fonction native pour allouer directement de la mémoire directe, et faites-le fonctionner via l'objet DirectByteBuffer en java comme référence à cette mémoire
Avantages : enregistre les étapes de copie de la mémoire et est plus efficace Rapide
Inconvénients : difficile à contrôler, facile à provoquer de la mémoire fuites
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!