I tienen un solo grano de resorte similar al siguiente:¿Los objetos de clase interna no estáticos se recogen después de que ya no se hace referencia a ellos?
public class MyServiceImpl {
private MyDAO myDAO;
public class MyInnerClass implements SomeInterface<MyInnerClass> {
@Override
public MyInnerClass loadFreshObject(final String key) {
return myDAO.load(key);
}
}
}
Las instancias de MyInnerClass
se están creando en código fuera del grano de primavera, pero se mantienen ninguna referencia a aquellos casos.
Suponiendo que no tengo control sobre el uso de estas clases internas públicas no estáticas (sé que idealmente serían privadas y estáticas para evitar filtrar la referencia a 'esto'), serán las instancias creadas de 'MyInnerClass' basura correctamente recogida?
He realizado mis propias pruebas al sobreescribir el finalize()
y parece que las instancias están siendo correctamente recolectadas, solo esperaba aclaraciones al respecto.
Gracias
"* Un iterador de una colección normalmente se implementa como una clase interna de la colección. *" Me ayudó a entender la relación entre las vidas de las clases externas e internas. –