Dans cet article, nous nous concentrons principalement sur ces questions : Une fois le programme Java exécuté, quand les objets du tas seront-ils recyclés ? Comment recycler ?
Le tas est également appelé « tas GC ». Puisque les collectionneurs utilisent désormais essentiellement des algorithmes de collecte générationnelle, le tas Java peut également être subdivisé en : nouvelle génération et ancienne génération, Le rapport est de 1 : 2 ; pour être plus détaillé, la nouvelle génération est divisée en zone Eden et zone Survivant, et le rapport est de 8 : 1. La figure suivante montre la structure du tas :
L'allocation de mémoire pour les objets dans le tas est strictement réglementée, la stratégie est la suivante :
les objets allouent d'abord de la mémoire dans la zone Eden de nouvelle génération
Les objets volumineux entrent directement dans l'ancienne génération, principalement des chaînes longues et des tableaux qui nécessitent une grande quantité d'espace mémoire continu
objets survivant à long terme ; entrez dans l’ancienne génération. Lorsque la mémoire dans la zone Eden est insuffisante, la JVM lance un MinorGC et l'âge de l'objet est augmenté de un. L'âge par défaut de l'objet atteint 15 et entre dans l'âge ancien ; >Détermination dynamique de l'âge. La somme des tailles de tous les objets du même âge est supérieure à la moitié de l'espace Survivant. Les objets supérieurs ou égaux à cet âge entrent dans l'ancienne génération
Le GC nouvelle génération fait référence au GC mineur. La collecte des déchets est effectuée dans la nouvelle génération, fréquemment et rapidement. Le GC d'ancienne génération (Major GC/Full GC) effectue le garbage collection dans l'ancienne génération, généralement accompagné d'au moins un gc mineur. Lent. Le GC complet sera déclenché dans les situations suivantes :
Espace insuffisant dans l'ancienne génération
Transfert long ; -terme objets survivants à l'ancienne génération, espace insuffisant
Il n'y a pas assez d'espace contigu alloué pour les gros objets ;
Il y a trop d'objets qui survivent à la collecte des ordures dans la nouvelle génération, et S1 ne peut pas les intégrer. L'espace garanti dans l'ancienne génération est insuffisant. L'espace garanti fait référence au fait que l'espace continu maximum disponible soit insuffisant. l'espace de l'ancienne génération est plus grand que l'espace total de tous les objets de la nouvelle génération.Presque tous les objets sont placés dans le tas, alors comment savoir si ces objets sont toujours utiles ? La JVM propose deux méthodes pour déterminer :
Méthode de comptage de références
: L'objet ajoute un compteur de référence. Chaque fois qu'il est référencé, la valeur du compteur augmente de un. Lorsque la référence devient invalide, la valeur du compteur diminue de un. Lorsque le nombre de références est de 0, cela signifie que l'objet n'est pas vivant. La méthode de comptage de références ne peut pas résoudre le problème de référence circulaire. Il existe des exemples détaillés dans le livre du professeur Zhou Zhipeng, qui sont relativement faciles à comprendre.Méthode d'analyse de l'accessibilité
Référence forte, objet neuf, l'éboueur ne le recyclera jamais
Références douces, la mémoire de ces objets sera recyclée avant que OMM n'apparaisse dans le système
Références faibles, dès que le ramasse-miettes le trouve lorsqu'il l'est ; fonctionne, il sera recyclé immédiatement ;
La référence factice est inutile et peut être recyclée à tout moment.
Nous savons déjà ce que L'objet est que le temps a été recyclé, alors comment le recycler ? Présentation des quatre algorithmes de collecte des déchets les plus couramment utilisés :
L'algorithme de collecte des ordures est une idée de recyclage de mémoire, et l'implémentation spécifique est un ramasse-miettes. Une brève introduction aux éboueurs couramment utilisés :
collecteur série en série. Fil unique, les autres travaux doivent être suspendus pendant la collecte des ordures. Copie pour les nouveaux étudiants, étiquetage pour les anciens. Simple et efficace
ParNouveau collecteur. Version multithread de la série ;
Parallel Scavenge collector, un collecteur multithread d'algorithme de copie. Faites attention au débit, au temps de code d'exécution du processeur / au temps total du processeur passé. Copie nouvelle génération, tri des marques ancienne génération
Série Ancien collector, version ancienne génération
Parallel Old collector, l'ancienne version de Parallel Scavenge
CMS collector, se concentrant sur la pause la plus courte ; Avec un collecteur simultané, le thread de garbage collection fonctionne (essentiellement) simultanément avec le thread utilisateur. Algorithme de marquage et de balayage
Pour plus de détails sur le éboueur, vous pouvez lire le livre de M. Zhou Zhipeng.
Tutoriel recommandé : "Tutoriel JS"
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!