- 強引用:
我們平時最常使用的基本對象引用盯漂,JVM不會回收強引用類型對象拆撼,即使內(nèi)存不足導致OOM也不會回收陵究。
實現(xiàn)一個強引用
User user = new User()
- 軟引用:
內(nèi)存空間足夠的情況下,JVM不會回收軟引用對象硫椰,如果內(nèi)存空間不足,那么軟引用對象會被回收萨蚕。
只要JVM沒有回收靶草,軟引用就可以繼續(xù)被程序使用,因此可以用軟引用存放一些內(nèi)存敏感的緩存岳遥。只要內(nèi)存足夠奕翔,對象就保持永遠不被回收。
實現(xiàn)軟引用:java.lang.ref.SoftReference
SoftRenference softRenfernce = new SoftRenference(new User());
// 獲取軟引用對象
System.out.println(softReference.get())
- 弱引用:垃圾回收線程只要掃描到弱引用對象浩蓉,不管內(nèi)存空間是否足夠派继,都會進行回收宾袜。
弱引用可以用來實現(xiàn)一些規(guī)范化映射,如:WeakHashMap驾窟,當key或者value不再被引用時可以自動回收庆猫。
實現(xiàn)一個弱引用:java.lang.ref.WeakReference
WeakReference weakReference = new WeakReference(new User());
System.out.println(weakReference.get())
- 虛引用:虛引用不決定對象的生命周期,如果一個對象僅持有虛引用绅络,那么他就和沒有任何引用一樣阅悍,任何時候都可以被JVM回收。
虛引用主要用來跟蹤對象被垃圾回收器回收的話昨稼,虛引用必須和引用隊列(ReferenceQuque)聯(lián)合使用节视,當垃圾回收器準備回收一個對象時,如果發(fā)現(xiàn)他還有虛引用假栓,就會在回收對象的內(nèi)存之前寻行,把這個虛引用加入到與之前關(guān)聯(lián)的引用隊列。
實現(xiàn)一個虛引用:java.lang.ref.ReferenceQueue
// 引用隊列
ReferenceQueue<User> queue = new ReferenceQueue<> ();
// 構(gòu)建虛引用對象
PhantomReference phantomReference = new PhantomReference(new User());
// 獲取虛引用對象
System.out.println(phantomReference .get())
ReferenceQueue(引用隊列)是必須的匾荆,當對象回收時會放入其中拌蜘,它最大的作用是跟中對象的回收。