Java中的引用類型主要包括四種:強(qiáng)引用、軟引用、弱引用和虛引用。以下是它們的詳細(xì)介紹:
- 強(qiáng)引用(Strong Reference):這是最常見(jiàn)的引用類型。當(dāng)一個(gè)對(duì)象具有強(qiáng)引用時(shí),垃圾回收器(Garbage Collector)不會(huì)回收它。即使系統(tǒng)內(nèi)存空間不足,Java虛擬機(jī)寧愿拋出OutOfMemoryError錯(cuò)誤,使程序異常終止,也不會(huì)靠隨意回收具有強(qiáng)引用的“存活”對(duì)象來(lái)解決內(nèi)存不足的問(wèn)題。
- 軟引用(Soft Reference):軟引用是用來(lái)描述一些還有用,但非必需的對(duì)象。軟引用所關(guān)聯(lián)的對(duì)象,只有在系統(tǒng)將要發(fā)生內(nèi)存溢出異常前,才會(huì)被列進(jìn)回收范圍之中進(jìn)行第二次回收。如果這次回收還沒(méi)有足夠的內(nèi)存,才會(huì)拋出內(nèi)存溢出異常。在JDK 1.2版之后提供了SoftReference類來(lái)實(shí)現(xiàn)軟引用。
- 弱引用(Weak Reference):弱引用也是用來(lái)描述非必需對(duì)象的,但是它的強(qiáng)度比軟引用更弱一些,被弱引用關(guān)聯(lián)的對(duì)象只能生存到下一次垃圾收集發(fā)生之前。當(dāng)垃圾收集器工作時(shí),無(wú)論當(dāng)前內(nèi)存是否足夠,都會(huì)回收掉只被弱引用關(guān)聯(lián)的對(duì)象。在JDK 1.2版之后提供了WeakReference類來(lái)實(shí)現(xiàn)弱引用。
- 虛引用(Phantom Reference):虛引用是最弱的一種引用關(guān)系。一個(gè)對(duì)象是否有虛引用的存在,完全不會(huì)對(duì)其生存時(shí)間構(gòu)成影響,也無(wú)法通過(guò)虛引用來(lái)取得一個(gè)對(duì)象實(shí)例。虛引用的唯一作用就是能在這個(gè)對(duì)象被收集器回收時(shí)收到一個(gè)系統(tǒng)通知。虛引用必須和引用隊(duì)列(ReferenceQueue)聯(lián)合使用,其主要作用是跟蹤對(duì)象被垃圾回收的活動(dòng)。在JDK 1.2版之后提供了PhantomReference類來(lái)實(shí)現(xiàn)虛引用。
總的來(lái)說(shuō),Java的這四種引用類型提供了對(duì)垃圾收集器行為的更細(xì)致的控制,允許程序員在內(nèi)存管理和程序性能之間做出更好的權(quán)衡。