¿Cómo identifica la recolección de basura objetos huérfanos?

stefan.at.wpf:

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 roota Ay B. Sé que Ase 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 rootque aún está vivo. Es Bahora 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?

Louis:

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.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=370926&siteId=1
Recomendado
Clasificación