Java的四種引用,強弱軟虛

強引用

強引用是平常中使用最多的引用,強引用在程序內存不足(OOM)的時候也不會被回收,使用方式:

String str = new String("Str");

軟引用

軟引用在程序內存不足時,會被回收,使用方式:

//注意:wrf這個引用也是強引用,它是指向SoftReference這個對象的,這裏的軟引用指的是指向new String("str")的引用,也就是SoftReference類中的T
SoftReference<String> wrf = new SoftReference<String>(new String("str"));

可用場景:創建緩存的時候,創建的對象放進緩存中,當內存不足時,JVM就會回收早先創建的對象。

弱引用

弱引用就是隻要JVM垃圾回收器發現了它,就會將之回收,使用方式:

WeakReference<String> wrf = new WeakReference<String>(str);

可用場景:Java源碼中的java.util.WeakHashMap中的key就是使用的弱引用,我的理解就是,一旦我不需要某個引用,JVM會自動幫我處理它,這樣我就不需要做其它操作了。

虛引用

虛引用的回收機制跟弱引用差不多,但是它被回收之前,會被放入ReferenceQueue中。注意,其它引用是被JVM回收後才被傳入ReferenceQueue中的。由於這個機制,所以虛引用大多被用於引用銷燬前的處理工作。還有就i是,虛引用的創建的時候,必須帶有ReferenceQueue,使用例之:

PhantomReference<String> prf = new PhantomReference<String>(new String("str"), new ReferenceQueue<>());

可用場景:對象銷燬前的一些操作,比如說資源釋放等。Object.finalize()雖然也可以做這類動作,但是這個方式既不安全又低效。

上述所說的幾類引用,都是指對象本身的引用,而不是指Reference的四個子類的引用。(SoftReference等)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章