Les programmes JAVA s'exécutent sur des machines virtuelles et nécessitent de l'espace mémoire lors de leur exécution. Lorsque la machine virtuelle exécute le programme JAVA, la mémoire qu'elle gère sera divisée en différentes zones de données pour une gestion facile. La zone de données de la mémoire de gestion des machines virtuelles est divisée comme suit :
Recommandation vidéo d'apprentissage Java : Tutoriel Java en ligne
1. Registre du compteur de programme
Indicateur de numéro de ligne, branchement, boucle, saut, gestion des exceptions, récupération de thread (commutation CPU) des instructions de bytecode, chaque thread nécessite un indépendant Le compteur et la mémoire privée du thread ne le font pas s’influencent mutuellement et aucune exception de débordement de mémoire ne se produira dans cette zone.
2. Pile de machines virtuelles (VM Stack)
La pile de machines virtuelles (VM Stack) est privée au thread. Le cycle de déclaration est le même que le thread. . La pile de machines virtuelles est un modèle de mémoire Java pour l'exécution de la méthode. Lorsque chaque méthode est exécutée, un cadre de pile est créé, qui constitue la structure de données de base lors de l'exécution de la méthode.
Le cadre de pile est utilisé pour stocker : table de variables locales, pile d'opérandes, lien dynamique, sortie de méthode, etc. Chaque exécution de méthode correspond au processus de cadre de pile de machine virtuelle de pile en pile. Il s'agit d'une structure de données, une table de variables locales dans la machine virtuelle, correspondant au modèle de données du programme au-dessus de la couche physique.
La table de variables locales est un programme exécutant un modèle de données qui stocke divers types de données connus lors de la compilation, tels que :
Boolean, byte, char, short, int, float, long, Double, object type de référence (variable d’adresse mémoire objet, pointeur ou handle). Lorsque le programme est en cours d'exécution, la taille de l'espace du cadre de pile est allouée en fonction de la table des variables locales. Pendant le fonctionnement, la taille reste inchangée. Type d'exception : stackOverFlowError. La profondeur de la pile de requêtes de thread est supérieure à la profondeur autorisée de la machine virtuelle OutOfMemory
L'espace mémoire est épuisé et ne peut pas être étendu.
3. Pile de méthodes natives
Semblable à la pile de machines virtuelles, la pile de machines virtuelles sert les programmes Java et la pile de méthodes natives prend en charge l'exécution de la machine virtuelle. La mise en œuvre spécifique du service est déterminée par le fabricant de la machine virtuelle et générera également des exceptions stackOverFlowError
et OutOfMemory
.
4. Heap
Le tas est la plus grande partie de la mémoire gérée par la machine virtuelle. Elle est partagée par tous les threads et est utilisée pour stocker des instances d'objets (objets). ), tableau), espace mémoire physiquement discontinu. Puisque le collecteur GC collecte en générations, il est divisé en : Eden de nouvelle génération, De l'espace SurVivor, À l'espace SurVivor, allouer un tampon (espace d'allocation), qui peut être divisé en plusieurs Threads. -tampon privé, ancienne génération.
5. Zone de méthode
La zone de méthode, comme la zone de tas, est une zone de mémoire partagée par les threads et est utilisée pour stocker les données chargées par la classe de machine virtuelle. informations, constantes, variables statiques, code compilé par le compilateur juste à temps (OSGI chargé dynamiquement) et autres données. Théoriquement, il fait partie de la machine virtuelle Java. Pour le distinguer, il est appelé Non-Heap.
Vous pouvez choisir de ne pas effectuer de garbage collection dans cette zone. Le but du recyclage dans cette zone est principalement de recycler le pool constant et de désinstaller les classes. Lorsque la zone mémoire est insuffisante, une exception OutOfMemory sera levée.
Pool de constantes d'exécution : partie de la zone de méthode, versions de classe, champs, interfaces, méthodes, etc., ainsi que divers littéraux et références de symboles générés lors de la compilation, qui sont stockés dans cette zone après la classe compilée est chargé. L'exception OutOfMemory sera levée.
6. Mémoire directe
La mémoire directe n'appartient pas à la zone de mémoire virtuelle. Il s'agit d'une méthode IO basée sur des canaux et des tampons. allouez directement de la mémoire hors tas, stockez l'adresse de mémoire externe référencée dans le tas et terminez le fonctionnement de la mémoire directement référencée via des références. Le NIO fourni après la version 1.4 améliore considérablement l'efficacité et évite l'opération de copie aller-retour entre la mémoire du tas et. La mémoire native, non contrôlée par la mémoire de la machine virtuelle, lèvera une exception OUTOfMemory.
Articles et tutoriels connexes recommandés : Introduction au développement Java
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!