2012-03-02 31 views
7

Supongamos que alguna clase no es alcanzable, pero hay otras clases anónimas generadas por la clase a la que se puede acceder. ¿Podría el primero ser eliminado por el recolector de basura?Clases anónimas Java y Garbage Collector

Ejemplo:


class Outer { 
    public Object getInner() { 
    return new Object() {}; 
    } 
} 

... 

Outer outer = new Outer(); 
Object inner = outer.getInner(); 

// Could the "outer" instance be removed here considering that "inner" is using below? 
+0

En su código está llamando a un método de la clase 'Outer'. ¿Qué puede ser inalcanzable allí? – Marcelo

Respuesta

8

No, la instancia exterior es todavía alcanzable en este caso, ya que cada clase interna no estática tiene una rerefence implícito a su instancia de clase exterior.

+0

La diferencia es que la clase anónima en mi ejemplo no usa su referencia explícitamente a la clase externa (ni interna ni externamente). Entonces creo que en realidad la clase exterior no es alcanzable. –

+4

Todavía tiene la referencia. Y la JVM no puede saber que esta referencia nunca se usará. Si nunca usa esta referencia externa, la clase debe ser una clase interna estática o una clase de nivel superior. –

+0

Ahora se vuelve claro. ¡Gracias! –

Cuestiones relacionadas