Maison >Java >javaDidacticiel >Exemple graphique de modèle de mémoire JVM
La zone de données d'exécution JVM (JVM Runtime Area) fait en fait référence à la division et à l'allocation de l'espace mémoire JVM pendant l'exécution de la JVM. Deux images trouvées sur Internet sont les suivantes (je pense personnellement que la deuxième image Native Method Stack devrait être dessinée dans le module Java Thead) :
La pile est divisée en pile de machines virtuelles Java et locale pile de méthodes
Le point clé est lapile de machine virtuelle Java, qui est threadprivée et a le même cycle de vie que le thread.
Chaque exécution de méthode créera un cadre de pile , qui est utilisé pour stocker table de variables locales, pile d'opérations, lien dynamique, sortie de méthode , etc. . Chaque méthode est appelée jusqu'à ce qu'elle soit exécutée. Correspond au processus par lequel un cadre de pile est poussé dans la pile jusqu'à être retiré de la pile dans la machine virtuelle.
La pile fait généralement référence à la partie de table de variables locales, qui stocke les 8 types de données de base connus lors de la compilation, ainsi que les références d'objets et les adresses d'instructions. La table des variables locales est allouée lors de la compilation Lors de la saisie d'une méthode, la taille mémoire allouée aux variables locales dans cette pile est déterminée.
Il y aura deux exceptions : StackOverFlowError et OutOfMemoneyError. Lorsque la profondeur de la pile de requêtes de thread est supérieure à la profondeur autorisée par la machine virtuelle, une erreur StackOverFlowError est générée ; la pile de la machine virtuelle est développée dynamiquement et lorsque l'expansion ne peut pas s'appliquer à suffisamment d'espace mémoire, une erreur OutOfMemoneyError est générée.
La pile de méthodes locales sert les méthodes locales (natives) utilisées par la machine virtuelle et est également privée de thread .
Le tas est une zone partagée par tous les threads et est créé lorsque la machine virtuelle démarre, dont le seul but est de stocker des instances d'objets .
La zone tas est la zone principale de gc. Elle est généralement divisée en deux blocs, la jeune génération et l'ancienne génération. Pour être plus détaillé, la jeune génération est divisée en zone Eden où les objets nouvellement créés sont stockés. Du survivant et Au survivant enregistrent les objets qui ont survécu au gc. Par défaut, chacun représente 8:1:1.
Cependant, de nombreux articles présentent qu'elle est divisée en 3 blocs et que la zone de méthode est comptée comme la génération permanente. Ceci est probablement basé sur la division des machines virtuelles Hotspot et, par exemple, IBM j9 n'a pas d'introduction à la génération permanente. Quel que soit le degré de partitionnement, les instances d'objet sont stockées.
Il y aura une exception OutOfMemoneyError
La zone est partagée par tous les threads et est utilisée pour stocker les informations de classe, les constantes, les variables statiques et d'autres données qui ont été chargées par la machine virtuelle . Décrit par la machine virtuelle Java comme une partie logique du tas. Il est d'usage de l'appeler aussi la génération permanente
La collecte des déchets visite rarement cette zone, mais elle doit également être recyclée, principalement pour le recyclage constant de la piscine et le déchargement de type.
Le pool constant est utilisé pour stocker divers bytecodes et références de symboles générés pendant le temps de compilation Le pool constant a un certain degré de dynamique. . Les constantes générées lors de la compilation peuvent y être stockées ; les constantes pendant l'exécution peuvent également être ajoutées au pool de constantes, comme la méthode inn() de string.
Le numéro de ligne exécuté par le courant Indicateur de fil . Déterminez l'instruction suivante en modifiant la valeur du compteur, comme les boucles, branches, sauts, gestion des exceptions, récupération de thread, etc. qui reposent tous sur des compteurs pour terminer .
Le multithreading des machines virtuelles Java est implémenté en changeant de thread à tour de rôle et en allouant du temps d'exécution du processeur. Pour que la commutation des threads revienne à la bonne position, chaque thread nécessite un compteur de programme indépendant, il est donc privé du thread.
La seule machine virtuelle Java ne spécifie aucun bloc OutofMemoryError
Nom |
Caractéristiques |
Fonction |
Paramètres de configuration |
Exception |
Compteur de programme |
Occupe une petite mémoire, le thread privé, le cycle de vie est le même que celui du thread |
Indicateur de numéro de ligne à peu près bytecode |
Aucun |
Aucun |
Pile de machines virtuelles |
Thread privé, le cycle de vie est le même que celui du thread, Utiliser l'espace mémoire continu |
Modèle de mémoire pour l'exécution de méthodes Java, stockant les tables de variables locales, les piles d'opérations, les liens dynamiques, les sorties de méthode et d'autres informations |
-Xss |
StackOverflowError OutOfMemoryError |
tas Java |
Partage de threads, le cycle de vie est de la même manière que la machine virtuelle, vous pouvez enregistrer des instances d'objet sans utiliser d'adresses mémoire consécutives |
Toutes les instances d'objet (y compris les tableaux) doivent être allouées sur le tas <.> |
-Xms-Xsx-Xmn | OutOfMemoryError |
Zone Méthode | Partage de thread, le cycle de vie est le même que celui de la machine virtuelle, vous ne pouvez ne pas utiliser d'adresses mémoire continue | Données de stockage telles que les informations de classe, les constantes, les variables statiques, le code compilé par un compilateur juste à temps qui ont été chargés par la machine virtuelle | -XX:PermSize:16M-XX:MaxPermSize:64M | OutOfMemoryError |
Pool de constantes d'exécution | Partie de la zone de méthode, dynamique | Stockage des littéraux et des références de symboles |
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!