Le collecteur de traçage utilise une méthode de gestion centralisée pour enregistrer globalement l'état de référence entre les objets à partir d'une série de racines GC. objets, recherchez toutes les chaînes de référence vers le bas à partir de ces nœuds. Lorsqu'un objet n'a aucune chaîne de référence vers GC Roots, cela prouve que cet objet n'est pas disponible.
Dans la figure ci-dessous, bien que les objets Object6, Object7 et Object8 se réfèrent l'un à l'autre, leur GC Les racines sont inaccessibles, elles seront donc considérées comme des objets recyclables.
Les objets pouvant être utilisés comme racines GC incluent :
Machine virtuelle Un objet de référence dans la pile (table de variables locales dans le cadre de la pile).
Objet référencé par la propriété statique de classe dans la zone méthode
Objet référencé par des constantes dans la zone de méthode
Objet de référence JNI dans la pile de méthodes locale.
Le principal il s'agit de trois algorithmes d'implémentation : copie, suppression de marques et compression de marques.
1. Algorithme de marquage
L'algorithme de marquage et d'effacement est l'algorithme de collecte le plus basique, et d'autres algorithmes de collecte sont basés sur cette idée. L'algorithme de marquage et d'effacement est divisé en deux étapes : « marquage » et « nettoyage » : d'abord, les objets qui doivent être recyclés sont marqués, et une fois le marquage terminé, les objets sont effacés uniformément.
Ses principaux inconvénients :
①. Le processus de marquage et de dédouanement n'est pas efficace
②. effacé Un grand nombre de fragments de mémoire discontinus seront générés.
2. Algorithme de réplication
Il divise la capacité de mémoire disponible en deux morceaux de taille égale, en utilisant un seul morceau à la fois. Lorsque ce bloc est épuisé, copiez les objets survivants dans un autre bloc, puis nettoyez immédiatement l'espace mémoire utilisé. De cette façon, un morceau de mémoire est recyclé à chaque fois et la fragmentation ne se produira pas. Il suffit de déplacer le pointeur du tas et d'allouer la mémoire dans l'ordre. C'est simple à mettre en œuvre et efficace à exécuter.
Principaux inconvénients :
>La mémoire est réduite de moitié par rapport à sa taille d'origine.
3 . Tags- Algorithme de classement
L'opération de marquage est cohérente avec l'algorithme "mark-clear". Les opérations ultérieures ne nettoient pas seulement les objets directement, mais nettoient les objets inutiles. Une fois l'objet terminé, déplacez tous les objets survivants vers une extrémité et mettez à jour les pointeurs référençant leurs objets.
Principaux inconvénients :
Sur la base du marquage, les objets doivent être déplacés. Le coût est relativement élevé, mais l'avantage est qu'il n'y aura pas de fragmentation de la mémoire.
Collecteur de comptage de références
Le collecteur de comptage de références utilise une méthode de gestion décentralisée, enregistrant si l'objet est référencé via un compteur. Lorsque le compteur atteint 0, cela signifie que l'objet n'est plus utilisé et peut être recyclé.Principaux inconvénients :
Scénario de référence circulaire Le recyclage ne peut pas Par exemple, dans la figure ci-dessous, ObjectC et ObjectB se réfèrent l'un à l'autre, donc même si ObjectA libère ses références à ObjectC et ObjectB, il ne peut pas être recyclé. sunJDK n'utilise pas cette méthode lors de l'implémentation de GC.
Ce qui précède est le contenu de l'apprentissage de la machine virtuelle Java - algorithme de récupération de place. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (m.sbmmt.com). )!