1. 強(qiáng)引用 Java中默認(rèn)聲明的就是強(qiáng)引用,比如: Object obj = new Object(); obj = null; 只要強(qiáng)引用存在,垃圾回收器將永遠(yuǎn)不會(huì)回收被引用的對(duì)象。如果想被回收,可以將對(duì)象置為null。
2. 軟引用(SoftReference) 在內(nèi)存足夠的時(shí)候,軟引用不會(huì)被回收,只有在內(nèi)存不足時(shí),系統(tǒng)才會(huì)回收軟引用對(duì)象,如果回收了軟引用對(duì)象之后仍然沒有足夠的內(nèi)存,才會(huì)跑出內(nèi)存溢出異常。 byte[] buff = new byte[1024 * 1024]; SoftReference sr = new SoftReference<>(buff);
3. 弱引用(WeakReference) 進(jìn)行垃圾回收時(shí),弱引用就會(huì)被回收。
4. 虛引用(PhantomReference)
5. 引用隊(duì)列(ReferenceQueue) 引用隊(duì)列可以與軟引用、弱引用、虛引用一起配合使用。 當(dāng)垃圾回收器準(zhǔn)備回收一個(gè)對(duì)象時(shí),如果發(fā)現(xiàn)它還有引用,就會(huì)在回收對(duì)象之前,把這個(gè)引用加入到引用隊(duì)列中。 程序可以通過判斷引用隊(duì)列中是否加入了引用,來判斷被引用的對(duì)象是否將要被垃圾回收,這樣可以在對(duì)象被回收之前采取一些必要的措施。