1.引用的基本概念
強(qiáng)引用:當(dāng)我們使用new創(chuàng)建對(duì)象時(shí),被創(chuàng)建的對(duì)象就是強(qiáng)引用,如Object object = new Object(),其中的object就是一個(gè)強(qiáng)引用了。如果一個(gè)對(duì)象具有強(qiáng)引用,JVM就不會(huì)去GC它,JVM寧可會(huì)報(bào)OOM來(lái)終止程序,也不回收該對(duì)象。
軟引用: 如果一個(gè)對(duì)象只具備軟引用,如果內(nèi)存空間足夠,那么JVM就不會(huì)GC它,如果內(nèi)存空間不足了,就會(huì)GC該對(duì)象。
弱引用: 如果一個(gè)對(duì)象只具有弱引用,只要JVM的GC線程檢測(cè)到了,就會(huì)立即回收。弱引用的生命周期要比軟引用短很多。不過(guò),如果垃圾回收器是一個(gè)優(yōu)先級(jí)很低的線程,也不一定會(huì)很快就會(huì)釋放掉軟引用的內(nèi)存。
虛引用:如果一個(gè)對(duì)象只具有虛引用,那么它就和沒(méi)有任何引用一樣,隨時(shí)會(huì)被JVM當(dāng)作垃圾進(jìn)行GC。
上面的四種引用對(duì)應(yīng)的是new關(guān)鍵字以及JAVA.lang.ref包中的SoftReference,WeakReference, PhantomReference。我們注意到在java.lang.ref包中,還存在一個(gè)類(lèi)叫做ReferenceQueue。
一、概述
在Java中提供了四個(gè)級(jí)別的引用:強(qiáng)引用,軟引用,弱引用和虛引用。在這四個(gè)引用類(lèi)型中,只有強(qiáng)引用FinalReference類(lèi)是包內(nèi)可見(jiàn),其他三種引用類(lèi)型均為public,可以在應(yīng)用程序中直接使用。引用類(lèi)型的類(lèi)結(jié)構(gòu)如圖所示。