Maison  >  Article  >  Java  >  Introduction détaillée à la zone de données d'exécution de la mémoire gérée par la machine virtuelle Java

Introduction détaillée à la zone de données d'exécution de la mémoire gérée par la machine virtuelle Java

黄舟
黄舟original
2017-03-30 10:42:421488parcourir

Cet article présente principalement des informations pertinentes sur l'explication détaillée de la zone de données d'exécution de la mémoire gérée par la machine virtuelle Java. Les amis dans le besoin peuvent se référer à

Explication détaillée de la zone de données d'exécution de la mémoire gérée. par la machine virtuelle Java.

Présentation

Lorsque la machine virtuelle Java exécute un programme Java, elle divise la mémoire qu'elle gère en plusieurs zones de données différentes. Ces zones ont leurs propres objectifs, ainsi que l'heure de création et de destruction. Certaines zones existent au démarrage du processus de la machine virtuelle, et certaines zones sont créées et détruites en fonction du début et de la fin du thread utilisateur.

Compteur de programme

Le compteur de programme est un petit espace mémoire, qui peut être considéré comme les mots exécutés par le thread actuel . Indicateur de numéro de ligne pour le code de section. Dans le concept de machine virtuelle modèle , l'interpréteur de bytecode fonctionne en modifiant la valeur de ce compteur pour sélectionner la prochaine instruction de bytecode à exécuter, branche, boucle , fonctions de base telles que le saut , la gestion des exceptions, la récupération des threads, etc. doivent toutes s'appuyer sur ce compteur pour terminer.

Si le thread exécute une méthode Java, ce compteur enregistre l'adresse de l'instruction de bytecode de la machine virtuelle en cours d'exécution. Si le thread exécute une méthode native, la valeur du compteur est vide. Cette zone de mémoire est la seule zone qui ne spécifie aucune condition OurOfMemoryError dans la spécification de machine virtuelle Java.

Pile de machines virtuelles

Comme le compteur de programme, la pile de machines virtuelles Java est également privée au thread, et son cycle de vie est le pareil que le fil. La pile de machine virtuelle décrit le modèle de mémoire de l'exécution de la méthode Java. Lorsque chaque méthode est exécutée, un cadre de pile (Stack Frame) est créé pour stocker les tables variables locales, les piles d'opérandes, les liens dynamiques et les méthodes d'exportation. et d'autres informations. Le processus depuis l'appel jusqu'à la fin de l'exécution de chaque méthode correspond au processus allant de l'insertion d'un cadre de pile dans la pile de la machine virtuelle jusqu'à son extraction.

La table des variables locales stocke divers types de données de base (booléen, byte, char, short, int, float, long, double) et références d'objet connues au moment de la compilation et l'adresse de l'instruction bytecode. (type d'adresse de retour).

Dans la spécification de la machine virtuelle Java, deux conditions d'exception sont spécifiées pour cette zone : si la profondeur de pile demandée par le thread est supérieure à la profondeur autorisée par la machine virtuelle, une exception StackOverflowError sera levée si le la pile de machines virtuelles peut être étendue dynamiquement, une exception OutOfMemoryError sera levée lorsqu'elle ne peut pas demander suffisamment de mémoire pendant l'expansion.

Pour jvm 32 bits, la taille par défaut est de 256 Ko, tandis que pour jvm 64 bits, la taille par défaut est de 512 Ko. Vous pouvez définir la valeur maximale de la pile de machines virtuelles via -Xss. Cependant, si le paramètre est trop grand, cela affectera le nombre de threads pouvant être créés.

Zone de méthode

La zone de méthode, comme le tas Java, est une zone de mémoire partagée par chaque thread. Elle est utilisée pour stocker les informations de classe et les constantes qui ont été. chargé par la machine virtuelle Variables statiques, code compilé par le compilateur juste à temps et autres données.

Selon la spécification de la machine virtuelle Java, lorsque la zone de méthode ne peut pas répondre aux exigences d'allocation de mémoire, une exception OutOfMemoryError sera levée.

Pile de méthodes natives

Les piles de méthodes natives jouent un rôle très similaire à la pile de machines virtuelles. La différence est que la pile de machines virtuelles exécute Java pour la machine virtuelle. Services de méthodes, tandis que la pile de méthodes locale sert les méthodes natives utilisées par la machine virtuelle.

Java Heap

Le tas Java (java tas) est la plus grande pièce de mémoire gérée par la machine virtuelle Java. C'est une zone mémoire partagée par tous les threads. Créée au démarrage de la machine virtuelle, cette zone mémoire a pour seul objectif de stocker les instances d'objet. Presque toutes les instances d'objet allouent ici de la mémoire.

Le tas Java est le principal domaine de gestion du garbage collection, c'est pourquoi il est souvent appelé le tas "GC".

Selon la spécification de la machine virtuelle Java, le tas Java peut se trouver dans un espace mémoire physiquement discontinu, à condition qu'il soit logiquement continu, tout comme notre espace disque. Lors de la mise en œuvre, il peut être implémenté sous forme de taille fixe ou évolutive. Cependant, les machines virtuelles courantes actuelles sont toutes implémentées de manière évolutive. (Contrôlé par -Xmx et -Xms) S'il n'y a pas de mémoire dans le tas pour terminer l'allocation d'instance et que le tas ne peut plus être étendu, une exception OutOfMemoryError sera levée.

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