1. 程式人生 > 實用技巧 >強引用、軟引用、弱引用、虛引用——4中引用的理解

強引用、軟引用、弱引用、虛引用——4中引用的理解

1.強引用(Reference):預設使用的就是強引用,不會被GC,即使報OOM也不會被GC

Object o = new Object();//預設就是強引用,一般使用這種

2.軟引用(SoftReference):當記憶體不夠時,才能被GC回收,記憶體足夠是不會被回收

3.弱引用(WeakReference):不管記憶體夠不夠,只要GC就會被回收,事例如下

public static void main(String[] args) {
        Object o = new Object();
        WeakReference reference = new WeakReference(o);
        System.out.println(reference.get());

        System.out.println(
"==================="); o = null;//給o賦值為空,目的是使上面new出來的Object物件除了弱引用以外沒有其他引用 System.gc(); System.out.println(reference.get()); }

列印結果:

Connected to the target VM, address: '127.0.0.1:56868', transport: 'socket'
java.lang.Object@35851384
===================
null
Disconnected from the target VM, address: 
'127.0.0.1:56868', transport: 'socket'

可以看出,只要GC,弱引用類的物件就會被回收

弱引用中,可以牽扯出WeakHashMap,這個map的key具有弱的特性,只要GC,key就會被回收,對應的entry就會被移除

4.虛引用(PhantomReference):形同虛設,不管有沒有GC,get()方法總是取不到值,一般要和引用佇列(ReferenceQueue)連用,在GC時,系統會先將PhantomReference丟進佇列裡,監控物件回收情況(也只有這麼點作用)

總結:軟、弱引用一般用在記憶體作為快取中,Mybatis快取的底層就是用的軟引用