Voy a través del siguiente mensaje el referencias débiles en Java: -WeakReference no se devuelve un valor nulo, aunque no hay fuertes referencias al objeto real de referencia
Understanding Weak References.
Después de pasar por la porción teórica, tratando de probar la referencia débil para condición nula. Pero, cheque nulo de referencia débil nunca devuelve cierto en código siguiente: -
package com.weak;
import java.lang.ref.WeakReference;
class Widget{}
public class WeakReferenceDemo {
public static void main(String[] args) throws InterruptedException {
Widget widget = new Widget() ;
WeakReference<Widget> valueWrapper = new WeakReference<Widget>(widget) ;
System.out.println(valueWrapper.get());
//here strong reference to object is lost
widget = null ;
int count = 0 ;
//here checking for null condition
while(valueWrapper.get() != null){
System.out.print(".");
Thread.sleep(432) ;
if(++count % 25 == 0) System.out.println();
}
System.out.println(valueWrapper.get());
}
}
Para sugerir, ¿por qué valueWrapper.get() no vuelve nula, aunque widget de referencia se asigna valor nulo .
Gracias.
GC no es recuento de referencias, cuando anula esa referencia, el GC ni siquiera lo sabe aún, lo encontrará durante el próximo ciclo de GC. – harold
@harold: upvoting. – mogli