¿La cadena de referencia débil no recogió la basura? ¿Cómo?
Estoy leyendo sobreWeakReference
En wikipedia y vi este código.
public class ReferenceTest {
public static void main(String[] args) throws InterruptedException {
WeakReference r = new WeakReference(new String("I'm here"));
WeakReference sr = new WeakReference("I'm here");
System.out.println("before gc: r=" + r.get() + ", static=" + sr.get());
System.gc();
Thread.sleep(100);
// only r.get() becomes null
System.out.println("after gc: r=" + r.get() + ", static=" + sr.get());
}
}
Cuando se ejecuta este es el resultado.
antes de gc: r = estoy aquí, estática = estoy aquí
después de gc: r = null, static = Estoy aquí
sr
yr
Las variables son ambos objetos de cadena de referencia.r
ahora es basura recolectada pero, porquesr
¿No se recogió la basura después de llamar al recolector de basura?
Sólo tengo curiosidad de cómo sucedió esto.