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 root
la A
et B
. Je sais que A
seront 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 B
maintenant 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?
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.