強引用、軟引用、弱引用、虛引用——4中引用的理解
阿新 • • 發佈:2021-01-01
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快取的底層就是用的軟引用