最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

簡述Java中的四種引用類型

 更新時間:2021年04月13日 11:50:19   作者:布禾  
從JDK1.2版本開始,把對象的引用分為四種級別,從而使程序能更加靈活的控制對象的生命周期。這四種級別由高到低依次為:強引用、軟引用、弱引用和虛引用,下面分別介紹下這四種引用。

簡介

從JDK1.2版本開始,把對象的引用分為四種級別,從而使程序能更加靈活的控制對象的生命周期。這四種級別由高到低依次為:強引用、軟引用、弱引用和虛引用,下面分別介紹下這四種引用。

強引用

強引用是最常用的引用類型,如下所示,new Object()會創(chuàng)建一個Object對象并存儲在堆上,變量object存儲對該對象的強引用。

Object object = new Object();

強引用不會被垃圾回收,所以要想回收該對象,則應該將指向該對象的變量顯示設為null,這樣該對象就由強引用轉(zhuǎn)變?yōu)闊o引用了。

示例:

public class ReferenceDemo {
    public static void main(String[] args) throws IOException {
        //強引用不會被垃圾回收
        ReferenceDemo referenceDemo = new ReferenceDemo();
        //強引用轉(zhuǎn)變?yōu)闊o引用,無引用可被垃圾回收
        referenceDemo = null;
        //觸發(fā)垃圾回收
        System.gc();
        //阻塞主線程,等待垃圾回收線程執(zhí)行
        System.in.read();
    }

    //對象被回收之前調(diào)用
    @Override
    protected void finalize() throws Throwable {
        super.finalize();
        System.out.println("-----finalize-----");
    }
}

軟引用

軟引用是使用SoftReference創(chuàng)建的,在內(nèi)存空間充足的情況下,軟引用不會被回收,而在內(nèi)存空間不足虛擬機拋出OutOfMemoryError之前,軟引用將會被回收。

示例:

public class ReferenceDemo {
    public static void main(String[] args) throws InterruptedException {
        //創(chuàng)建ReferenceDemo對象的軟引用
        SoftReference<ReferenceDemo> softReference = new SoftReference<>(new ReferenceDemo());
        //觸發(fā)垃圾回收
        System.gc();
        //阻塞主線程,等待垃圾回收線程執(zhí)行
        Thread.sleep(5000);
        //softReference.get()返回軟引用對象,如果對象已經(jīng)被垃圾回收,則返回null
        System.out.println(softReference.get());

        //創(chuàng)建25M的字節(jié)數(shù)組
        byte[] bytes = new byte[1024 * 1024 * 25];
        //內(nèi)存已經(jīng)不足,阻塞主線程,等待垃圾回收線程執(zhí)行
        Thread.sleep(5000);
        //重新輸出軟引用對象
        System.out.println(softReference.get());
    }
}

/*
 * 輸出結果:
 * com.buhe.demo.demos.reference.ReferenceDemo@76fb509a
 * null
 */

注意:示例運行前需要設置堆內(nèi)存大小為30M(-Xmx30m -Xms30m)。

用途:軟引用可以用于對內(nèi)存空間敏感的緩存,緩存的對象一直保存,直到內(nèi)存空間不足而被回收。

弱引用

弱引用是使用WeakReference創(chuàng)建的,在垃圾回收線程執(zhí)行過程中,只要找到了弱引用,不管內(nèi)存空間是否足夠,弱引用對象都將被回收。由于垃圾回收線程是一個優(yōu)先級很低的線程,因此不一定會很快發(fā)現(xiàn)那些只具有弱引用的對象。

示例:

public class ReferenceDemo {
    public static void main(String[] args) throws InterruptedException {
        //創(chuàng)建ReferenceDemo的弱引用
        WeakReference<ReferenceDemo> weakReference = new WeakReference<>(new ReferenceDemo());
        //weakReference.get()返回弱引用對象,如果對象已經(jīng)被垃圾回收,則返回null
        System.out.println(weakReference.get());

        //觸發(fā)垃圾回收
        System.gc();
        //阻塞主線程,等待垃圾回收線程執(zhí)行
        Thread.sleep(3000);

        //重新輸出弱引用對象
        System.out.println(weakReference.get());
    }
}

/*
 * 輸出結果:
 * com.buhe.demo.demos.reference.ReferenceDemo@76fb509a
 * null
 */

用途:弱引用也可以用于緩存,可以參考WeakHashMap類。

虛引用

虛引用是使用PhantomReference創(chuàng)建的,它是所以引用類型中最弱的。虛引用對象和沒有引用的對象相同,可以在任何時候被垃圾回收,并且虛引用必須要與引用隊列一起使用。

當垃圾回收線程回收一個虛引用對象時,它將在垃圾回收后銷毀該對象,并將PhantomReference添加到引用隊列中。

示例:

public class ReferenceDemo {
    public static void main(String[] args) throws InterruptedException {
        //創(chuàng)建引用隊列
        ReferenceQueue<Object> referenceQueue = new ReferenceQueue();
        //創(chuàng)建ReferenceDemo的虛引用
        PhantomReference<ReferenceDemo> phantomReference = new PhantomReference<>(new ReferenceDemo(), referenceQueue);
        //phantomReference.get()總是返回null
        System.out.println("phantomReference.get():" + phantomReference.get());
        //輪詢此隊列,查看是否有可用的Reference對象,有則返回該對象,否則返回null
        System.out.println("referenceQueue.poll():" + referenceQueue.poll());

        //觸發(fā)垃圾回收
        System.gc();
        //阻塞主線程,等待垃圾回收線程執(zhí)行
        Thread.sleep(3000);
        System.out.println("------垃圾回收之后------");

        System.out.println("phantomReference.get():" + phantomReference.get());
        System.out.println("referenceQueue.poll():" + referenceQueue.poll());
    }
}

/*
 * 輸出結果:
 * phantomReference.get():null
 * referenceQueue.poll():null
 * ------垃圾回收之后------
 * phantomReference.get():null
 * referenceQueue.poll():java.lang.ref.PhantomReference@76fb509a
 */

用途:虛引用可以用于精確的檢測對象何時從內(nèi)存中刪除,通過檢查引用隊列來判斷對象是否已經(jīng)被回收。

以上就是簡述Java中的四種引用類型的詳細內(nèi)容,更多關于Java 引用類型的資料請關注腳本之家其它相關文章!

相關文章

  • 利用SpringBoot和LiteFlow解鎖復雜流程

    利用SpringBoot和LiteFlow解鎖復雜流程

    隨著業(yè)務的復雜化,企業(yè)需要更加高效、便捷地管理自己的業(yè)務流程,這就需要借助一些流程引擎實現(xiàn),今天,我們就來介紹一種基于Java語言開發(fā)的輕量級工作流引擎——LiteFlow,以及如何在Spring Boot框架中集成它,從而提高企業(yè)的工作效率和開發(fā)效率
    2023-06-06
  • Springboot接收Get參數(shù)實踐過程

    Springboot接收Get參數(shù)實踐過程

    本文主要介紹了在Spring Boot中如何接收不同類型的請求參數(shù),包括在路徑中直接傳遞參數(shù)、跟在問號后面?zhèn)鬟f參數(shù)、使用Map接收參數(shù)、接收數(shù)組以及使用對象接收參數(shù)等方法
    2024-12-12
  • IDEA如何對單個的java class文件打成jar包

    IDEA如何對單個的java class文件打成jar包

    這篇文章主要介紹了IDEA如何對單個的java class文件打成jar包問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • java根據(jù)方法名稱取得反射方法的參數(shù)類型示例

    java根據(jù)方法名稱取得反射方法的參數(shù)類型示例

    利用java反射原理調(diào)用方法時,常先需要傳入方法參數(shù)數(shù)組才能取得方法。該方法參數(shù)數(shù)組采用動態(tài)取得的方式比較合適
    2014-02-02
  • 深入理解Java設計模式之策略模式

    深入理解Java設計模式之策略模式

    這篇文章主要介紹了JAVA設計模式之策略模式的的相關資料,文中示例代碼非常詳細,供大家參考和學習,感興趣的朋友可以了解下
    2021-11-11
  • Java黑科技之通過Google Java Style 文件配置IDEA和Ecplise代碼風格

    Java黑科技之通過Google Java Style 文件配置IDEA和Ecplise代碼風格

    在日常開發(fā)中,多人團隊協(xié)作開發(fā)一個項目是很常見的,特別是大公司,這就會涉及到多人在一個工程上開發(fā)代碼.無規(guī)矩不成方圓,一個好的代碼風格,更加有利于團隊協(xié)作,減少代碼沖突,提高代碼可閱讀性,美觀性.本文就帶著大家仔細研究這個黑科技 ,需要的朋友可以參考下
    2021-05-05
  • java序列化的種類和使用場景詳解

    java序列化的種類和使用場景詳解

    本文詳細介紹了序列化的概念、Java內(nèi)置序列化、自定義序列化、第三方序列化框架(如Kryo、Protobuf)以及在分布式系統(tǒng)和RPC框架中的應用,通過比較不同序列化方式的優(yōu)缺點,指導開發(fā)者選擇合適的序列化方案,以確保系統(tǒng)的性能、安全性和可維護性
    2025-01-01
  • Spring框架中一個有用的小組件之Spring Retry組件詳解

    Spring框架中一個有用的小組件之Spring Retry組件詳解

    Spring Retry 是從 Spring batch 中獨立出來的一個功能,主要實現(xiàn)了重試和熔斷,對于那些重試后不會改變結果,毫無意義的操作,不建議使用重試,今天通過本文給大家介紹Spring Retry組件詳解,感興趣的朋友一起看看吧
    2021-07-07
  • springboot自動裝配之@ComponentScan使用方式

    springboot自動裝配之@ComponentScan使用方式

    @componentScan注解用于掃描指定路徑下的組件,并自動將它們注冊為Spring?Bean,該注解支持多種過濾規(guī)則,可以自定義掃描過濾規(guī)則,Spring?Boot通過ConfigurationClassPostProcessor處理@ComponentScan注解,并在啟動時創(chuàng)建和注冊BeanDefinition對象
    2025-01-01
  • Java面試題沖刺第八天--Spring框架2

    Java面試題沖刺第八天--Spring框架2

    這篇文章主要為大家分享了最有價值的三道Spring框架面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結構和算法相關的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-07-07

最新評論

宁远县| 东乌珠穆沁旗| 遵义县| 东阳市| 广州市| 鹿邑县| 夏津县| 南城县| 乌什县| 台安县| 霍邱县| 镇巴县| 惠州市| 洛阳市| 辛集市| 清河县| 朝阳县| 怀来县| 南和县| 盐山县| 高雄县| 安阳县| 滕州市| 嘉鱼县| 孟村| 大足县| 防城港市| 临猗县| 错那县| 通城县| 根河市| 香格里拉县| 榆林市| 梧州市| 靖西县| 临武县| 营口市| 海阳市| 阿克陶县| 呼和浩特市| 元谋县|