Quiero cerrar correctamente el objeto Cerrar cuando ya no se hace referencia a otros hilos.Uso de ReferenceQueue y WeakReference
Escribí una pequeña prueba, pero después de poner en cola el objeto el método get devuelve nulo, es decir, el método poll devuelve el objeto apropiado que no tiene referente.
public static void main(String[] args)
{
ReferenceQueue<Closeable> reaped = new ReferenceQueue<Closeable>();
Closeable s = <SOME CLOSEABLE IMPL>;
WeakReference<Closeable> ws = new WeakReference<Closeable>(s, reaped);
s = null;
System.gc();
Closeable ro = (Closeable)reaped.poll().get();
ro.close();
}
Gracias de antemano. Cualquier ayuda será apreciada.
Hola gracias por la respuesta tan rápida, se trata de IndexSearcher de de Lucene. – yan
Acabo de probarlo, después del System.gc(); el tamaño ReferenceQueue es 0. – yan
@yan no hay garantía de que tus objetos obtengan GCes después de 'System.gc()' ni siquiera cuando salgas de la JVM. no use la finalización para su lógica de negocios. Está allí solo para propósitos especiales como el almacenamiento en caché y (eventualmente) la prevención de fugas de recursos. No puede dejar decir 'commit()' o 'rollback()' DB transacciones en el finalizador –