1.強引用:強引用是使用最普遍的引用捐康。如果一個對象具有強引用仇矾,那垃圾回收器絕不會回收它。當(dāng)內(nèi)存空間不足解总,Java虛擬機寧愿拋出OutOfMemoryError錯誤贮匕,使程序異常終止,也不會靠隨意回收具有強引用的對象來解決內(nèi)存不足的問題花枫。如果不使用時刻盐,(全局變量)可以通過將引用賦值null來弱化引用,(非全局)或超出對象的生命周期范圍劳翰,則gc認(rèn)為該對象不存在引用敦锌,這時就可以回收這個對象。
2.軟引用:內(nèi)存空間足夠時佳簸,不會被回收乙墙;如果內(nèi)存空間不足了,就會回收這些對象的內(nèi)存生均。
聲明軟引用的方式:
String?str=newString("abc");//?強引用
SoftReference?softRef=newSoftReference(str);//?軟引用
3.弱引用:弱引用與軟引用的區(qū)別在于:只具有弱引用的對象擁有更短暫的生命周期听想。在垃圾回收器線程掃描它所管轄的內(nèi)存區(qū)域的過程中,一旦發(fā)現(xiàn)了只具有弱引用的對象马胧,不管當(dāng)前內(nèi)存空間足夠與否汉买,都會回收它的內(nèi)存。不過佩脊,由于垃圾回收器是一個優(yōu)先級很低的線程蛙粘,因此不一定會很快發(fā)現(xiàn)那些只具有弱引用的對象。
WeakReference?abcWeakRef?=newWeakReference(str);
4.虛引用
“虛引用”顧名思義威彰,就是形同虛設(shè)组题,與其他幾種引用都不同,虛引用并不會決定對象的生命周期抱冷。如果一個對象僅持有虛引用,那么它就和沒有任何引用一樣梢褐,在任何時候都可能被垃圾回收器回收旺遮。虛引用主要用來跟蹤對象被垃圾回收器回收的活動。虛引用與軟引用和弱引用的一個區(qū)別在于:虛引用必須和引用隊列 (ReferenceQueue)聯(lián)合使用盈咳。
總結(jié)
引用強弱級別:
強引用 ?> ?軟引用 ?> ?弱引用 ?> ?虛引用