Maison  >  Article  >  Java  >  Fonctionnalités avancées JVM--Introduction à la zone de structure de la mémoire Java

Fonctionnalités avancées JVM--Introduction à la zone de structure de la mémoire Java

巴扎黑
巴扎黑original
2017-06-26 10:21:501673parcourir

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn