2011-10-20 9 views
6

sto attraversando il seguente post su Riferimenti deboli in java: -WeakReference non si restituisce un valore nullo, se non ci sono forti riferimenti all'oggetto vero e proprio riferimento

Understanding Weak References.

Dopo aver attraversato la parte teorica, cercando di testare il riferimento debole per condizione nullo. Ma, nullo controllo per riferimento debole non ritorna mai vero nel codice seguente: -

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()); 
    } 
} 

Si prega di suggerire, perché valueWrapper.get() non restituisce nulla, anche se widget viene assegnato di riferimento valore nullo .

Grazie.

+4

Il GC non è un conteggio dei riferimenti, quando annulli quel riferimento, il GC non lo sa ancora - lo troverà durante il prossimo ciclo del GC. – harold

+0

@harold: upvoting. – mogli

risposta

11

Anziché attendere la garbage collection, provare a chiamare da soli con Runtime.getRuntime().gc(), quindi controllare il riferimento debole per null.

Gli oggetti debolmente raggiungibili sono recuperati solo quando GC è in esecuzione. Dal momento che il tuo programma non crea più istanze nell'heap, questo potrebbe non succedere mai senza richiedere manualmente l'esecuzione.

+0

Ora, ho capito. Grazie. – mogli

2

WeakReference.get() non restituisce nulla fino a quando il garbage collector non è riuscito a determinare che l'oggetto è solo debolmente raggiungibile. Potrebbe volerci del tempo.

Problemi correlati