Remarques d'apprentissage JVM: Gestion de la mémoire JVM et concepts de collecte de déchets JVM. La structure de mémoire JVM se compose de tas, de pile, de pile de méthode locale, de zone de méthode et d'autres pièces. De plus, JVM utilise différents mécanismes de collecte des ordures pour les adresses de téléchargement de la nouvelle génération et de l'ancienne génération respectivement.
Tout d'abord, jetons un coup d'œil à la structure de mémoire JVM, qui est composée de tas, de pile, de pile de méthode locale, de zone de méthode et d'autres pièces. Le diagramme de structure est illustré ci-dessous.
Notes d'apprentissage JVM Gestion de la mémoire JVM et collection de déchets JVM
Structure de mémoire JVM
La structure de mémoire JVM se compose de tas, de pile, de pile de méthode locale, de zone de méthode et d'autres pièces. Le diagramme de structure est le suivant:
1) tas
La mémoire de tous les objets créés par New est allouée dans le tas, et leur taille peut être contrôlée par -xmx et -xms. Le tas est divisé en Ceponymous et l'ancienne génération, et le ceponyme est en outre divisé en zones d'Eden et de survivants. Enfin, le survivant est composé d'espace et de tospace. Le diagramme de structure est le suivant:
Une nouvelle génération. Les nouveaux objets sont alloués de la mémoire par la nouvelle génération. Lorsque Eden est insuffisant, les objets survivants seront transférés à Survivor. La taille de la nouvelle génération peut être contrôlée par -xmn, ou -xx: Survivorratio peut être utilisé pour contrôler le rapport d'Eden et de survivant. Utilisé pour stocker des objets qui ont survécu à plusieurs collections de déchets dans la nouvelle génération.
2) pile
Lorsque chaque thread exécute chaque méthode, il s'appliquera pour une trame de pile dans la pile. Chaque trame de pile comprend une zone variable locale et une pile d'opérande, qui est utilisée pour stocker des variables temporaires, des paramètres et des résultats intermédiaires lors de cet appel de méthode.
3) pile de méthode locale
Utilisé pour soutenir l'exécution des méthodes natives, stockant l'état de chaque appel de méthode native
4) Zone de méthode
Stocke les informations de classe à charger, les variables statiques et les constantes de type final, les attributs et les informations de méthode. JVM utilise PermanetGeneration pour stocker les zones de méthode, et les valeurs minimales et maximales peuvent être spécifiées par -xx: permsize et -xx: maxpermSize. Après avoir introduit la structure de la mémoire JVM, jetons un coup d'œil à l'adresse de téléchargement du mécanisme de collecte des ordures JVM.
Mécanisme de collecte des ordures JVM
JVM adopte différents mécanismes de collecte des ordures pour les nouvelles et anciennes générations respectivement
La nouvelle génération de GC:
Le ceponyme a généralement un court délai de survie, il est donc recyclé sur la base de l'algorithme de copie. Le soi-disant algorithme de copie consiste à scanner les objets survivants et à les copier dans un nouvel espace complètement inutilisé, correspondant au Ceponymous, qui est à copier entre Eden et FromSpace ou Tospace. La nouvelle génération utilise un pointeur inactif pour contrôler le déclenchement GC. Le pointeur maintient le dernier objet alloué dans l'intervalle de nouvelle génération. Lorsqu'il y a un nouvel objet pour allouer la mémoire, il est utilisé pour vérifier si l'espace est suffisant. Si cela ne suffit pas, il déclenchera GC. Lorsque les objets sont alloués en continu, les objets passeront progressivement d'Eden à Survivor, et enfin à l'ancienne génération.
Utilisez JavavisualVM pour le voir clairement et observez qu'après la pleine génération, l'objet sera transféré à l'ancienne génération, puis efface et continue de se charger. Lorsque l'ancienne génération est pleine, une exception en outre-armé sera signalée, comme indiqué dans la figure ci-dessous:
En termes de mécanisme d'exécution, JVM fournit en série GC (SerialGC), parallèle de recyclage GC (Parallelscavenge) et parallèle GC (Parnew)
1) GC série
L'ensemble du processus de numérisation et de copie est effectué d'une manière filetée unique. Il convient aux applications avec un CPU unique, un petit espace dans la nouvelle génération et pas des exigences très élevées pour le temps de pause. Il s'agit de la méthode GC par défaut au niveau du client. Il peut être obligé de le spécifier via -xx: + usageerialgc
2) Recyclage parallèle de GC
L'ensemble du processus de numérisation et de réplication est effectué de manière multi-thread. Il convient au multi-processeur et aux applications avec de courtes exigences en matière de temps de pause. Il s'agit de la méthode GC utilisée par le niveau du serveur par défaut. Il peut être utilisé pour forcer la spécification de -xx: + useParallelGC et utiliser -xx: parallelgcthreads = 4 pour spécifier le nombre de threads.
3) GC parallèle
Utiliser avec GC simultanée à l'ancienne
Old Generation GC:
Différentes de la nouvelle génération, les objets survivent depuis longtemps et sont relativement stables. Par conséquent, l'algorithme Mark est utilisé pour recycler. La soi-disant marque signifie analyser les objets survivants, puis recycler les objets non marqués. Après le recyclage, l'espace vide sera fusionné ou marqué pour une allocation facile la prochaine fois. En bref, il est nécessaire de réduire la perte d'efficacité causée par la fragmentation de la mémoire. En termes de mécanisme d'exécution, JVM fournit des GC série (SerialMSC), GC parallèle (parallelMSC) et GC simultanée (CMS). Les détails d'algorithmes spécifiques doivent être étudiés plus avant.
Les mécanismes GC ci-dessus doivent être utilisés en combinaison, et la méthode spécifiée est indiquée dans le tableau suivant:
Ce qui précède est tout le contenu de la compréhension approfondie des principes de travail de Java GC que l'éditeur vous apporte. J'espère que tout le monde soutiendra Wulin.com plus ~