Comment collecte de déchets d'identifier des objets orphelins?

stefan.at.wpf:

Compte tenu de l'état de la mémoire comme celui-ci:

(1) GC root -> A
(2) GC root -> B
(3) B -> GC root

où « -> » signifie « a une référence à ». Maintenant , imaginez que l' on supprime les références de GC rootla Aet B. Je sais que Aseront garbaged collectées, car il est pas accessible plus.

Mais qu'en est- B? Ce n'est pas accessible depuis la GC root, mais il a une référence à la GC root, qui est encore en vie. Est -ce Bmaintenant les déchets collectés ou non? En d' autres termes: pour trouver des objets orphelins, est l'analyse que fait dans une direction, de la racine GC à d' autres objets?

Louis :

La stratégie de base utilisée pour la collecte des ordures est de déterminer si les données sur le tas est accessible à partir de la pile ou non. Dans le cas contraire, libérer sa mémoire.

Vous pouvez visualiser cela comme si

STACK  *** HEAP *** HEAP *** STACK
GC root.  -> A      -> b   -> GC root

Donc, si vous supprimez un B vous avez encore atteint la pile, mais le garbage collector n'a jamais atteint B et éradique (il traverse seulement de gauche à droite / de la pile à tas). Peu importe que la pile peut être atteint à partir du tas dans votre exemple B -> GC racine. Seulement que les données de tas ne peuvent pas être atteints de la pile.

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=370914&siteId=1
conseillé
Classement