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