Dado un estado de la memoria de esta manera:
(1) GC root -> A
(2) GC root -> B
(3) B -> GC root
donde "->" medios "tiene una referencia a". Ahora imagina uno quita la referencias de GC root
a A
y B
. Sé que A
se recogen garbaged, ya que no es accesible más.
Pero ¿qué pasa B
? No es accesible desde la GC root
, pero tiene una referencia a la GC root
que aún está vivo. Es B
ahora el recolector de basura o no? O en otras palabras: para encontrar objetos huérfanos, el análisis se realiza sólo en una dirección, desde la raíz GC a otros objetos?
La estrategia básica utilizada para la recolección de basura es determinar si o no los datos en el montón es accesible desde la pila. Si no es así, liberar su memoria.
Puede visualizar esto como por lo
STACK *** HEAP *** HEAP *** STACK
GC root. -> A -> b -> GC root
Así que si se quita una todavía tiene B de llegar a la pila, pero el recolector de basura nunca llega a B y lo elimina (sólo atraviesa de izquierda a / desde la pila a pila). No importa que la pila se puede llegar desde la pila en su ejemplo B -> GC raíz. Sólo que los datos del montón, no se puede llegar desde la pila.