Maison >Java >javaDidacticiel >Apprentissage de la machine virtuelle Java - Modèle de mémoire d'architecture
1 : Schéma du module du système technologique Java
2 : Modèle de zone mémoire JVM
1. 🎜>
est également appelé "génération permanente" et "non tas". Il est utilisé pour stocker les informations de classe, les constantes et les variables statiques chargées par la machine virtuelle. Il s'agit dechaque zone Mémoire partagée par les threads. La valeur minimale par défaut est de 16 Mo et la valeur maximale est de 64 Mo. Vous pouvez limiter la taille de la zone de méthode via les paramètres -XX:PermSize et -XX:MaxPermSize.
Pool de constantes d'exécution : il fait partie de la zone de méthode. En plus des informations de description telles que la version de la classe, les champs, les méthodes, les interfaces, etc., le fichier Classe possède également un. pool de constantes. Utilisé pour stocker diverses références de symboles générées par le compilateur. Ce contenu sera placé dans le pool de constantes d'exécution dans la zone de méthode après le chargement de la classe.
2. La pile de machines virtuelles
décrit le modèle de mémoire d'exécution de la méthode Java : Lorsque chaque méthode est exécutée, un « cadre de pile » sera créé pour stocker des informations telles que les tables de variables locales (y compris les paramètres), les piles d'opérations et les sorties de méthode. Le processus depuis chaque méthode appelée jusqu'à la fin de l'exécution correspond au processus d'un cadre de pile depuis son insertion dans la pile jusqu'à sa sortie de la pile dans la pile de la machine virtuelle. Le cycle de déclaration est le même que celui du fil et estprivé au fil.
La table de variables locales stocke divers types de données de base connus du compilateur (boolean, byte, char, short, int, float, long, double), des références d'objets (pointeurs de référence, Not l'objet lui-même), les données de 64 bits de long et de type double occuperont l'espace de 2 variables locales, et les autres types de données n'en occuperont que 1. L'espace mémoire requis pour la table des variables locales est alloué lors de la compilation. Lors de la saisie d'une méthode, la taille des variables locales que la méthode doit allouer dans le cadre de pile est entièrement déterminée. Le cadre de pile ne modifiera pas la taille du local. table variable pendant l'espace d'exécution.
3. La pile de méthodes locales
est fondamentalement similaire à la pile de machines virtuelles. est le Java exécuté par les services de méthode de la machine virtuelle, tandis que la pile de méthodes locale sert les méthodes natives.
4. Heap
Également appelé tas Java, le tas GC est la plus grande mémoire gérée par la machine virtuelle Java. Une zone mémoire partagée par différents threads est créée au démarrage de la JVM. Cette zone mémoire stocke les instances d'objets et les tableaux (tous les nouveaux objets). La taille est définie par les paramètres -Xms (valeur minimale) et -Xmx (valeur maximale) -Xms est la mémoire minimale demandée au démarrage de la JVM par défaut à 1/64 de la mémoire physique du système d'exploitation mais moins de 1G -Xmx est la mémoire maximale que la JVM peut demander. La valeur par défaut est 1/4 de la mémoire physique mais moins. que 1G La valeur par défaut est lorsque la mémoire du tas libre est inférieure à 40 %, la JVM augmentera le tas à la taille spécifiée par -Xmx Vous pouvez spécifier ce ratio via -XX:MinHeapFreeRation=; la mémoire du tas libre est supérieure à 70 %, la JVM réduira la taille du tas à La taille spécifiée par -Xms peut être spécifiée par XX:MaxHeapFreeRation= Pour le système en cours d'exécution, afin d'éviter des ajustements fréquents. à la taille du tas au moment de l'exécution, généralement -Xms et -Xmx. Les valeurs sont définies sur les mêmes .
Étant donné que les collectionneurs utilisent désormais des algorithmes de collecte générationnels, le tas est divisé en la nouvelle génération et l'ancienne génération. La nouvelle génération stocke principalement les objets nouvellement créés et les objets qui ne sont pas encore entrés dans l'ancienne génération. L'ancienne génération stocke les objets qui ont survécu à plusieurs GC mineurs.
Nouvelle génération :
Les nouveaux objets créés par le programme sont tous de La nouvelle génération alloue de la mémoire. La nouvelle génération se compose d'Eden Space et de deux Survivor Spaces de la même taille (généralement également appelés S0 et S1 ou From et To). La taille de la nouvelle génération peut être spécifiée via le paramètre -Xmn, ou -XX : SurvivorRation pour ajuster la taille de Eden Space et Survivor Space.
Ancienne génération :
est utilisé pour stocker les objets qui ont survécu à plusieurs GC de nouvelle génération, tels que les objets de cache. Les objets nouvellement créés peuvent également entrer directement dans l'ancienne génération : ①. Pour les objets volumineux, vous pouvez définir le paramètre de démarrage -XX:PretenureSizeThreshold=1024 (l'unité est en octets, la valeur par défaut est 0) pour indiquer que lorsqu'il dépasse la taille, il ne sera pas alloué dans la nouvelle génération, mais sera alloué directement dans l'ancienne génération. ②. Pour les objets de grand tableau, aucun objet externe n'est référencé dans le tableau.
La taille mémoire occupée par l'ancienne génération est la valeur correspondant à -Xmx moins la valeur correspondant à -Xmn.
5. Compteur de programme
est la plus petite zone mémoire. Sa fonction est l'indicateur du numéro de ligne du bytecode exécuté par le thread actuel, l'interpréteur de bytecode fonctionne en modifiant la valeur de ce compteur. exécutées, les fonctions de base telles que le branchement, le bouclage, la gestion des exceptions, la récupération de threads, etc. doivent toutes s'appuyer sur des compteurs.
Trois : Mémoire directe
La mémoire directe ne fait pas partie de la mémoire de la machine virtuelle, ni une zone mémoire définie dans la spécification de la machine virtuelle Java. Le NIO nouvellement ajouté dans jdk1.4 introduit la méthode IO du canal et du tampon. Il peut appeler la méthode native pour allouer directement de la mémoire hors tas. Cette mémoire hors tas est la mémoire locale et n'affectera pas la taille de la mémoire tas. .
Ce qui précède est le contenu de l'apprentissage de la machine virtuelle Java - architecture et modèle de mémoire. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !