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

Java中的WeakHashMap淺析

 更新時(shí)間:2023年09月06日 10:54:48   作者:小布丁value  
這篇文章主要介紹了Java中的WeakHashMap淺析,weakhashmap關(guān)鍵是:當(dāng)一個(gè)對(duì)象被GC回收時(shí),響應(yīng)的值對(duì)象的引用從map中刪除,weakhashmap能節(jié)約存儲(chǔ)空間,來(lái)實(shí)現(xiàn)緩存那些非必要的數(shù)據(jù),需要的朋友可以參考下

WeakHashMap介紹

  • weakhashmap優(yōu)化jvm,是GC更加智能回收無(wú)用的對(duì)象。
  • weakhashmap關(guān)鍵是:當(dāng)一個(gè)對(duì)象被GC回收時(shí),響應(yīng)的值對(duì)象的引用從map中刪除,weakhaskmap能節(jié)約存儲(chǔ)空間,來(lái)實(shí)現(xiàn)緩存那些非必要的數(shù)據(jù)

引用類(lèi)型

java中提供的引用類(lèi)型有4種

  1. 強(qiáng)(Strong)引用
  2. 軟(soft)引用
  3. 弱(weak)引用
  4. 虛( phantom)引用

強(qiáng)(Strong)引用

常使用的引用類(lèi)型,在創(chuàng)建對(duì)象時(shí)

在這里插入圖片描述

只要強(qiáng)引用存在,GC永遠(yuǎn)不會(huì)回收被引用的對(duì)象,通過(guò)new創(chuàng)建的對(duì)象所關(guān)聯(lián)引用就是強(qiáng)引用,此時(shí)GC就不會(huì)碰該對(duì)象,當(dāng)jvm內(nèi)存空間不足,jvm寧愿拋出OOM(OutOfMemoryError)運(yùn)行時(shí)村務(wù),使得程序終止,也不會(huì)隨時(shí)回收強(qiáng)引用所引用的對(duì)象 java中除了強(qiáng)引用還有三種引用,在java.lang.ref.Reference

在這里插入圖片描述

//referent為引用指向的對(duì)象
 Reference(T referent) {
        this(referent, null);
    }
//ReferenceQueue對(duì)象,可以理解為隊(duì)列
    Reference(T referent, ReferenceQueue<? super T> queue) {
        this.referent = referent;
        this.queue = (queue == null) ? ReferenceQueue.NULL : queue;
    }
Object o=new Object();
SoftReferencr sr=new SoftReference(o,queue);

sr為軟引用,指向O對(duì)象,o會(huì)在一定實(shí)際被垃圾回收器進(jìn)行回收,sr對(duì)象本身的清理依賴(lài)Queue,當(dāng)sr出現(xiàn)在Queue時(shí),說(shuō)明指向?qū)ο笠呀?jīng)無(wú)效了,可以放心清理

軟(soft)引用

軟引用用來(lái)處理啊一些有用但非必須對(duì)象,對(duì)于軟引用所作用的對(duì)象,當(dāng)內(nèi)存空間充足時(shí),如果發(fā)生GC操作,軟引用所作用的對(duì)象是不會(huì)被回收的,當(dāng)空間 不足時(shí),GC操作時(shí)軟引用所作用的對(duì)象才會(huì)被回收

public static void softReferenceDemo(){<!--{C}%3C!%2D%2D%20%2D%2D%3E--> Object o = new Object(); ReferenceQueue <Object> referenceQueue = new ReferenceQueue <Object>(); SoftReference <Object> softReference = new SoftReference <Object>(o, referenceQueue); System.out.println(softReference.get()); System.out.println(softReference.isEnqueued()); System.out.println(referenceQueue.poll()); /** * java.lang.Object@4aa594e1 * false * null */ /** * 當(dāng)對(duì)象被回收時(shí),他會(huì)放入到referenceQueue實(shí)例中 */ //創(chuàng)建比較大的對(duì)象,模擬內(nèi)存不足,觸發(fā)GC,回收軟引用對(duì)象 byte[] bytes = new byte[7*1024*1024]; System.gc(); //手動(dòng)觸發(fā)GC /** * 理論上空間不足,對(duì)象會(huì)被回收,隊(duì)列中會(huì)有軟引用對(duì)象 */ System.out.println(softReference.get()); System.out.println(softReference.isEnqueued()); System.out.println(referenceQueue.poll()); /** * java.lang.Object@4aa594e1 false null 空間充足,未回收 */ } public static void softReferenceDemo(){
        Object o = new Object();
        ReferenceQueue <Object> referenceQueue = new ReferenceQueue <Object>();
        SoftReference <Object> softReference = new SoftReference <Object>(o, referenceQueue);
        System.out.println(softReference.get());
        System.out.println(softReference.isEnqueued());
        System.out.println(referenceQueue.poll());
        /**
         * java.lang.Object@4aa594e1
         * false
         * null
         */
        /**
         * 當(dāng)對(duì)象被回收時(shí),他會(huì)放入到referenceQueue實(shí)例中
         */
        //創(chuàng)建比較大的對(duì)象,模擬內(nèi)存不足,觸發(fā)GC,回收軟引用對(duì)象
        byte[] bytes = new byte[7*1024*1024];
        System.gc(); //手動(dòng)觸發(fā)GC
        /**
         * 理論上空間不足,對(duì)象會(huì)被回收,隊(duì)列中會(huì)有軟引用對(duì)象
         */
        System.out.println(softReference.get());
        System.out.println(softReference.isEnqueued());
        System.out.println(referenceQueue.poll());
        /**
         *
         java.lang.Object@4aa594e1
         false
         null
         空間充足,未回收
         */
    }

弱(weak)引用

弱引用他的強(qiáng)度會(huì)比軟引用更弱一些,被軟引用所關(guān)聯(lián)的對(duì)象,當(dāng)發(fā)生GC操作時(shí),無(wú)論當(dāng)前空間是否充足,都會(huì)回收軟引用所作用的對(duì)象,生命周期會(huì)更加短暫

 public static void weakReferenceDemo(){
        Object o = new Object();
        ReferenceQueue <Object> referenceQueue = new ReferenceQueue <Object>();
        WeakReference <Object> weakReference = new WeakReference<Object>(o, referenceQueue);
        System.out.println(weakReference.get());
        System.out.println(weakReference.isEnqueued());
        System.out.println(referenceQueue.poll());
        System.gc(); //手動(dòng)觸發(fā)GC
        System.out.println(weakReference.get());
        System.out.println(weakReference.isEnqueued());
        System.out.println(referenceQueue.poll());
    }

weakHashMap實(shí)現(xiàn)就是基于弱來(lái)實(shí)現(xiàn)的

虛引用

虛引用是最弱的引用關(guān)系,一個(gè)對(duì)象是否有虛引用的存在,不會(huì)影響對(duì)象的聲明周期,虛引用存在的目的是當(dāng)對(duì)象被回收時(shí)收到一個(gè)系統(tǒng)通知

public static void phantomferenceDemo(){
        Object o = new Object();
        ReferenceQueue <Object> referenceQueue = new ReferenceQueue <Object>();
        PhantomReference <Object> phantomReference = new PhantomReference<Object>(o, referenceQueue);
        o = null;
        System.gc(); //手動(dòng)觸發(fā)GC
        if (phantomReference.isEnqueued()) {
            System.out.println("正在被回收");
        } else {
            System.out.println("沒(méi)有被回收");
        }
    }

到此這篇關(guān)于Java中的WeakHashMap淺析的文章就介紹到這了,更多相關(guān)Java的WeakHashMap內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java集合List和Map互轉(zhuǎn)的方法總結(jié)

    Java集合List和Map互轉(zhuǎn)的方法總結(jié)

    有時(shí)候我們需要將給定的List轉(zhuǎn)換為Map,或者M(jìn)ap轉(zhuǎn)換為L(zhǎng)ist,本文主要介紹了Java集合List和Map互轉(zhuǎn)的方法總結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • 學(xué)習(xí)Java正則表達(dá)式(匹配、替換、查找)

    學(xué)習(xí)Java正則表達(dá)式(匹配、替換、查找)

    這篇文章主要介紹了Java正則表達(dá)式的匹配、替換、查找和切割等操作,對(duì)于正則表達(dá)式的匹配、替換大家已經(jīng)不陌生了吧
    2015-12-12
  • Java線程等待喚醒幾種方法小結(jié)

    Java線程等待喚醒幾種方法小結(jié)

    線程等待和喚醒有三種實(shí)現(xiàn)方法,分別是Object類(lèi)中的wait、notify,Condition類(lèi)中的await、signal,LockSupport類(lèi)中的park、unpark方法,感興趣的可以了解一下
    2023-10-10
  • Java Hibernate中的查詢(xún)策略和抓取策略

    Java Hibernate中的查詢(xún)策略和抓取策略

    Hibernate是一種Java對(duì)象關(guān)系映射框架,提供了多種查詢(xún)和抓取策略,用于優(yōu)化數(shù)據(jù)庫(kù)訪問(wèn)性能。查詢(xún)策略包括延遲加載、立即加載、查詢(xún)緩存等,抓取策略包括join抓取、子查詢(xún)抓取、批量抓取等。這些策略可以根據(jù)實(shí)際應(yīng)用場(chǎng)景進(jìn)行選擇和配置,提高數(shù)據(jù)訪問(wèn)的效率和穩(wěn)定性
    2023-04-04
  • java使用CountDownLatch實(shí)現(xiàn)多線程協(xié)作

    java使用CountDownLatch實(shí)現(xiàn)多線程協(xié)作

    在多線程編程中,經(jīng)常需要實(shí)現(xiàn)一種機(jī)制來(lái)協(xié)調(diào)多個(gè)線程的執(zhí)行,以確保某些操作在所有線程完成后再進(jìn)行,CountDownLatch?就是?Java?并發(fā)包中提供的一種同步工具,下面我們就來(lái)看看如何使用CountDownLatch實(shí)現(xiàn)多線程協(xié)作吧
    2023-11-11
  • Java定時(shí)任務(wù)取消的示例代碼

    Java定時(shí)任務(wù)取消的示例代碼

    java定時(shí)任務(wù)如何取消,并比如,我之前想每周二晚上6點(diǎn)自動(dòng)生成一條devops流水線,現(xiàn)在我想停掉,下面給大家分享java定時(shí)任務(wù)取消的示例代碼,演示如何創(chuàng)建一個(gè)每周二晚上6點(diǎn)自動(dòng)生成一條devops流水線的定時(shí)任務(wù),感興趣的朋友一起看看吧
    2024-02-02
  • java中l(wèi)ambda(函數(shù)式編程)一行解決foreach循環(huán)問(wèn)題

    java中l(wèi)ambda(函數(shù)式編程)一行解決foreach循環(huán)問(wèn)題

    這篇文章主要介紹了java中l(wèi)ambda(函數(shù)式編程)一行解決foreach循環(huán)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • JVM類(lèi)加載機(jī)制原理及用法解析

    JVM類(lèi)加載機(jī)制原理及用法解析

    這篇文章主要介紹了JVM類(lèi)加載機(jī)制原理及用法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • java將一個(gè)整數(shù)轉(zhuǎn)化成二進(jìn)制代碼示例

    java將一個(gè)整數(shù)轉(zhuǎn)化成二進(jìn)制代碼示例

    這篇文章主要介紹了java將一個(gè)整數(shù)轉(zhuǎn)化成二進(jìn)制代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2017-12-12
  • SpringBoot?Maven的操作與配置圖文教程

    SpringBoot?Maven的操作與配置圖文教程

    Spring?Boot開(kāi)發(fā)中,將項(xiàng)目打包為可執(zhí)行JAR是部署到生產(chǎn)環(huán)境的關(guān)鍵步驟,這篇文章主要介紹了SpringBoot?Maven操作與配置的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-10-10

最新評(píng)論

金坛市| 体育| 绍兴市| 长兴县| 九江县| 连城县| 开平市| 辉南县| 合水县| 彝良县| 新宁县| 西藏| 三原县| 皮山县| 贵定县| 屏东县| 永昌县| 斗六市| 甘谷县| 措勤县| 堆龙德庆县| 余干县| 敦化市| 牙克石市| 镇江市| 台中县| 绍兴县| 石泉县| 平乐县| 耿马| 罗江县| 时尚| 南皮县| 安福县| 元阳县| 南通市| 文登市| 雅江县| 鹤壁市| 明水县| 长垣县|