2010-03-12 17 views
11

Me preguntaba cómo el recolector de basura en Java se ocupa de la siguiente situación.¿Cómo funciona Garbage Collection en Java?

objeto A tiene una referencia al objeto B y el objeto B tiene una referencia al objeto C. El programa principal tiene una referencia al objeto A. Así que usted puede utilizar el objeto B a través de objetos A y C a través de objetos Objeto B a través del Objeto A.

¿Qué sucede con el Objeto B y el Objeto C, si el enlace entre el Objeto A y el Objeto B está establecido en nulo?

¿El Objeto B y el Objeto C ahora han sido recolectados por el recolector de basura? Quiero decir que todavía hay una conexión entre el Objeto B y el Objeto C.

+0

Hice la otra pregunta en una publicación diferente: http://stackoverflow.com/questions/2433261/how-does-garbage-collection-in-java-work-with-classes – JordyOnrust

Respuesta

9

¿El objeto B y el objeto C ahora han sido recogidos por el recolector de basura?

Sí. Bueno, ellos son candidatos para la colección porque no hay manera de alcanzar el objeto B y C a través de la raíz que es A.

4

No puede contar con que el recolector de basura trabaje en un momento específico, ya que su comportamiento es impredecible, todo lo que puede decir es que los objetos B y C solo son elegibles para recolección de basura

1

Creo que la lógica es diferente. Si el objeto no es accesible desde un hilo, puede ser recolectado.

6

Sí, B y C son elegibles para la recolección de basura, si no se puede acceder desde ninguna raíz de la GC (las raíces de la GC generalmente son todas las cadenas y todas las referencias en la pila).

+0

...y todas las variables estáticas –

+3

@Maurice: no directamente, hasta donde yo sé. las variables estáticas se pueden alcanzar a través de la 'Clase 'a la que pertenecen, que se puede alcanzar a través del' ClassLoader' que las cargó, que se puede alcanzar a través de otras clases que se cargan, que se puede alcanzar a través de objetos de ese tipo. Entonces, si el 'ClassLoader' está convertido en GC, incluso puede perder el valor de una variable estática. –

+0

Puede que tenga razón –

1

Si no hay una referencia a objeto, entonces será conveniente para GC proceder

2

En de hecho, la recolección de basura en java es una cosa muy sofisticada, mucho más que en el intérprete de Ruby, como un ejemplo.

De todos modos, la base teórica es la misma.

El GC identifica objetos gráficos que ya no son accesibles por el código del programa (es decir, no tienen más referencias en el código activo). Cuando hablo de un gráfico de objetos, hablo con precisión del gráfico de objetos B-> C. una vez que es inalcanzable, puede ser sometido a GC, pero no se puede saber cuándo será, debido a que el GC trata de optimizar al máximo su trabajo para evitar ralentizar la aplicación.

2

B y C son eligables para la recolección de basura porque no puede acceder a ellos más. Con la imprevisibilidad del recolector de basura, todo lo que sabemos es que es muy probable que se recopilen en algún momento en el futuro.

0

B tiene ninguna referencia a ella por lo que será el recolector de basura en primer lugar, a continuación, se entenderá que C tiene ninguna referencia a ella, por lo que habrá C basura recogida. Es para ilustrar, Jvm es lo suficientemente inteligente como para sacarlos de un solo golpe.

+2

No hay forma de saber que B se usará primero, es decir, que no debe haber un código de finalizador en B y C que dependa de ese orden. El GC no cuenta las referencias, pero verifica la accesibilidad. Si no se puede acceder tanto a B como a C, son igualmente inalcanzables. –

4

Como es habitual, este article es una lectura obligada para quien quiera entender qué hace la recolección de basura. Está bien escrito y tiene dibujos explicativos.

+0

Al abrir el enlace, necesito un nombre de usuario y contraseña. – JordyOnrust

+0

Ah, FTP ataca de nuevo. He editado mi publicación, con otro enlace que debería funcionar mejor. También hay una versión en PDF. –

+0

@ Bright010957: Tada! https://ritdml.rit.edu/dspace/bitstream/1850/5112/1/PWilsonProceedings1992.pdf –

Cuestiones relacionadas