国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java中弱引用和軟引用的區(qū)別以及虛引用和強(qiáng)引用介紹

2019-11-26 15:32:43
字體:
供稿:網(wǎng)友

知道弱引用和軟引用的概念與如何使用它們是兩碼事,引用類在垃圾回收工作的過程中有重要作用。我們都知道垃圾回收器會回收符合回收條件的對象的內(nèi)存,但并不是所有的程序員都知道回收條件取決于指向該對象的引用類型。這正是Java中弱引用和軟引用的主要區(qū)別。如果一個(gè)對象只有弱引用指向它,垃圾回收器會立即回收該對象,這是一種急切回收方式。相對的,如果有軟引用指向這些對象,則只有在JVM需要內(nèi)存時(shí)才回收這些對象。弱引用和軟引用的特殊行為使得它們在某些情況下非常有用。例如:軟引用可以很好的用來實(shí)現(xiàn)緩存,當(dāng)JVM需要內(nèi)存時(shí),垃圾回收器就會回收這些只有被軟引用指向的對象。而弱引用非常適合存儲元數(shù)據(jù),例如:存儲ClassLoader引用。如果沒有類被加載,那么也沒有指向ClassLoader的引用。一旦上一次的強(qiáng)引用被去除,只有弱引用的ClassLoader就會被回收。這篇文章中我們將講述不同類型的Java引用,例如:強(qiáng)引用(Strong Reference)和虛引用(PhantomReference)。

Java中弱引用VS軟引用

Java中有如下四種類型的引用:

1.強(qiáng)引用(Strong Reference)
2.弱引用(WeakReference)
3.軟引用(SoftReference)
4.虛引用(PhantomReference)

強(qiáng)引用是我們在編程過程中使用的最簡單的引用,如代碼String s=”abc”中變量s就是字符串對象”abc”的一個(gè)強(qiáng)引用。任何被強(qiáng)引用指向的對象都不能被垃圾回收器回收,這些對象都是在程序中需要的。弱引用使用java.lang.ref.WeakReference class 類來表示,你可以使用如下代碼創(chuàng)建弱引用:

復(fù)制代碼 代碼如下:

Counter counter = new Counter(); // strong reference - line 1
WeakReference<Counter> weakCounter = new WeakReference<Counter>(counter); //weak reference
counter = null; // now Counter object is eligible for garbage collection

現(xiàn)在只要你給強(qiáng)引用對象counter賦空值null,該對象就可以被垃圾回收器回收。因?yàn)樵搶ο蟠藭r(shí)不再含有其他強(qiáng)引用,即使指向該對象的弱引用weakCounter也無法阻止垃圾回收器對該對象的回收。相反的,如果該對象含有軟引用,Counter對象不會立即被回收,除非JVM需要內(nèi)存。Java中的軟引用使用java.lang.ref.SoftReference類來表示,你可以使用如下代碼創(chuàng)建軟引用:

復(fù)制代碼 代碼如下:

Counter prime = new Counter(); // prime holds a strong reference 主站蜘蛛池模板: 麟游县| 罗源县| 华阴市| 黔南| 中方县| 华亭县| 邵阳市| 固安县| 永川市| 崇礼县| 山阳县| 泽库县| 施秉县| 仙桃市| 太原市| 云龙县| 阳春市| 沂南县| 神农架林区| 阳江市| 大埔区| 舟山市| 呈贡县| 凤阳县| 安溪县| 兴义市| 兴海县| 屯昌县| 威信县| 资中县| 平原县| 武安市| 舒兰市| 盘锦市| 苏尼特左旗| 泽州县| 哈尔滨市| 长顺县| 三台县| 修文县| 伊金霍洛旗|