1. 程式人生 > >4種引用型別小總結

4種引用型別小總結

強引用:

如果想中斷強引用和某個物件之間的關聯,可以顯示地將引用賦值為null,這樣一來的話,JVM在合適的時間就會回收該物件。

比如Vector類的clear方法中就是通過將引用賦值為null來實現清理工作的

軟引用:

        SoftReference sr = new SoftReference(new Object());

軟引用是用來描述一些有用但並不是必需的物件,在Java中用java.lang.ref.SoftReference類來表示。對於軟引用關聯著的物件,只有在記憶體不足的時候JVM才會回收該物件。因此,這一點可以很好地用來解決OOM的問題,並且這個特性很適合用來實現快取:比如網頁快取、圖片快取等。

弱引用:

        WeakReference wr = new WeakReference(new Object);

弱引用也是用來描述非必需物件的,當JVM進行垃圾回收時,無論記憶體是否充足,都會回收被弱引用關聯的物件。在java中,用java.lang.ref.WeakReference類來表示。不過要注意的是,這裡所說的被弱引用關聯的物件是指只有弱引用與之關聯,如果存在強引用同時與之關聯,則進行垃圾回收時也不會回收該物件(軟引用也是如此)。

String型別的值是儲存在常量池,GC不會去清理。

虛引用:PhantomReference pr =

        ReferenceQueue<String> queue = new ReferenceQueue<String>();
        PhantomReference<String> pr = new PhantomReference<String>(new String("hello"), queue);
        System.gc();
        System.out.println(pr.get());
        System.out.println(queue.get);