Maison  >  Article  >  Java  >  Introduction détaillée à la zone mémoire Java JVM

Introduction détaillée à la zone mémoire Java JVM

零下一度
零下一度original
2017-06-25 09:50:431216parcourir
La zone mémoire que la machine virtuelle jvm doit utiliser lors de son exécution. D'une manière générale, il s'agit du tas et de la pile. En fait, le tas et la pile ne sont que des termes relativement généraux. Les vraies différences sont les suivantes
Tout d'abord Figure 1 :

En général, il s'agit
du modèle de mémoire de Java
Le modèle de mémoire est divisé en mémoire de tas (heap) et zone de méthode (parfois également appelée non-heap) et pile
Le tas est divisé en la nouvelle génération (Young) et l'ancienne génération (old/Tenured)
La nouvelle génération est divisée selon le rapport par défaut de 8 : 1 : 1 de l'espace Eden, de l'espace survivant à l'espace survivant
Lorsque le garbage collection est effectué, les objets survivants d'Eden et du survivant de seront copiés dans le serviteur vers l'espace
Puis depuis et vers l'espace Échange. (Lorsque les objets dans la zone d'origine sont suffisamment vieux, c'est-à-dire que le nombre de fois marqué atteint l'ancien niveau, ils iront à l'ancienne génération)
Les paramètres de réglage de la taille de la mémoire peuvent être les suivants Description de l'image
-XMS : l'espace minimum du tas
-XMX : l'espace maximum du tas
-PermSize : L'espace minimum de la zone méthode
- MaxPermSize : L'espace maximum de la zone méthode
-Xss : Espace de pile de chaque thread
- newSize : l'espace minimum de la nouvelle génération
-maxNewSize : l'espace maximum espace de la nouvelle génération
La mémoire de l'ancienne génération peut être contrôlée en définissant la capitalisation du tas et la taille de la nouvelle génération
Mémoire de l'ancienne génération = mémoire de tas - mémoire de nouvelle génération
pile

Programme compteur                                                                                                                                                                                                                                                                                         L'indicateur de numéro de ligne du bytecode exécuté par le thread. L'interpréteur de bytecode obtient l'instruction de bytecode à exécuter en modifiant le numéro de ligne du compteur pendant le travail. Le compteur est vide lors de l'appel d'une méthode native (native)

Pile de machines virtuelles                                                                                                                              Le cadre de pile est utilisé pour stocker des variables locales, des piles d'opérandes, des liens dynamiques, des sorties de méthode et d'autres informations
Tableau de variables locales : types de données de base, références d'objet, informations longues et les types doubles occupent deux espaces de variables locales
Chaque fois qu'une méthode est appelée, les paramètres seront poussés sur la pile

Pile de méthodes locales    
Thread privé. Lors de l'appel de la méthode native
Heap :

Heap memory, instance d'objet. Et les tableaux sont stockés iciLe tas est divisé en nouvelle génération et ancienne génération

Dans l'algorithme de collecte générationnelle, la nouvelle génération est divisée en espace Eden, de l'espace survivant et au survivant espace).Ils Le rapport de mémoire entre les deux est de 8:1:1
Zone de méthode, variables statiques et code compilé juste à temps
Il y a également un pool de constantes d'exécution sous la zone méthode : stockage des littéraux et des références de symboles générés lors de la compilation

Article de blog de référence

Ici, nous allons vous tester : Quelles sont les informations de classe mentionnées dans l'article ?

Quelles sont les références littérales et symboliques générées lors de la compilation ?

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