亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java中的WeakHashMap淺析

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

WeakHashMap介紹

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

引用類型

java中提供的引用類型有4種

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

強(Strong)引用

常使用的引用類型,在創(chuàng)建對象時

在這里插入圖片描述

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

在這里插入圖片描述

//referent為引用指向的對象
 Reference(T referent) {
        this(referent, null);
    }
//ReferenceQueue對象,可以理解為隊列
    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對象,o會在一定實際被垃圾回收器進行回收,sr對象本身的清理依賴Queue,當sr出現(xiàn)在Queue時,說明指向?qū)ο笠呀?jīng)無效了,可以放心清理

軟(soft)引用

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

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 */ /** * 當對象被回收時,他會放入到referenceQueue實例中 */ //創(chuàng)建比較大的對象,模擬內(nèi)存不足,觸發(fā)GC,回收軟引用對象 byte[] bytes = new byte[7*1024*1024]; System.gc(); //手動觸發(fā)GC /** * 理論上空間不足,對象會被回收,隊列中會有軟引用對象 */ 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
         */
        /**
         * 當對象被回收時,他會放入到referenceQueue實例中
         */
        //創(chuàng)建比較大的對象,模擬內(nèi)存不足,觸發(fā)GC,回收軟引用對象
        byte[] bytes = new byte[7*1024*1024];
        System.gc(); //手動觸發(fā)GC
        /**
         * 理論上空間不足,對象會被回收,隊列中會有軟引用對象
         */
        System.out.println(softReference.get());
        System.out.println(softReference.isEnqueued());
        System.out.println(referenceQueue.poll());
        /**
         *
         java.lang.Object@4aa594e1
         false
         null
         空間充足,未回收
         */
    }

弱(weak)引用

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

 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(); //手動觸發(fā)GC
        System.out.println(weakReference.get());
        System.out.println(weakReference.isEnqueued());
        System.out.println(referenceQueue.poll());
    }

weakHashMap實現(xiàn)就是基于弱來實現(xiàn)的

虛引用

虛引用是最弱的引用關(guān)系,一個對象是否有虛引用的存在,不會影響對象的聲明周期,虛引用存在的目的是當對象被回收時收到一個系統(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(); //手動觸發(fā)GC
        if (phantomReference.isEnqueued()) {
            System.out.println("正在被回收");
        } else {
            System.out.println("沒有被回收");
        }
    }

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

相關(guān)文章

  • Spring整合Mybatis具體代碼實現(xiàn)流程

    Spring整合Mybatis具體代碼實現(xiàn)流程

    這篇文章主要介紹了Spring整合Mybatis實操分享,文章首先通過介紹Mybatis的工作原理展開Spring整合Mybatis的詳細內(nèi)容,需要的小伙伴可以參考一下
    2022-05-05
  • 完美解決Spring聲明式事務不回滾的問題

    完美解決Spring聲明式事務不回滾的問題

    下面小編就為大家?guī)硪黄昝澜鉀QSpring聲明式事務不回滾的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • 深入聊一聊JDK中的Map和Set

    深入聊一聊JDK中的Map和Set

    這篇文章主要給大家介紹了關(guān)于JDK中Map和Set的相關(guān)資料,文中通過示例代碼以及圖文介紹的非常詳細,對大家學習或者使用jdk具有一定的參考學習價值,需要的朋友可以參考下
    2022-12-12
  • Java8如何基于flatMap處理異常函數(shù)

    Java8如何基于flatMap處理異常函數(shù)

    這篇文章主要介紹了Java8如何基于flatMap處理異常函數(shù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • Spring Security OAuth2 token權(quán)限隔離實例解析

    Spring Security OAuth2 token權(quán)限隔離實例解析

    這篇文章主要介紹了Spring Security OAuth2 token權(quán)限隔離實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • 理解java和python類變量以及類的成員變量

    理解java和python類變量以及類的成員變量

    這篇文章主要幫助大家理解java和python類變量以及類的成員變量,用實例進行解析,感興趣的朋友可以參考一下
    2016-02-02
  • 詳解Springboot應用啟動以及關(guān)閉時完成某些操作

    詳解Springboot應用啟動以及關(guān)閉時完成某些操作

    這篇文章主要介紹了詳解Springboot應用啟動以及關(guān)閉時完成某些操作,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • SpringBoot?配置文件總結(jié)

    SpringBoot?配置文件總結(jié)

    SpringBoot中提供一個全局的配置文件:application.properties,這個配置文件的作用就是,允許我們通過這個配置文件去修改Spring?Boot自動配置的默認值,本文詳細總結(jié)了SpringBoot配置文件,文中有詳細的代碼示例,感興趣的同學可以參考下
    2023-05-05
  • 深入理解@component與@Configuration注解

    深入理解@component與@Configuration注解

    這篇文章主要介紹了深入理解@component與@Configuration注解,從Spring3.0,@Configuration用于定義配置類,可替換xml配置文件,被注解的類內(nèi)部包含有一個或多個被@Bean注解的方法,這些方法將會被掃描,并用于構(gòu)建bean定義,初始化Spring容器,需要的朋友可以參考下
    2023-11-11
  • 解決SpringBoot內(nèi)嵌Tomcat并發(fā)容量的問題

    解決SpringBoot內(nèi)嵌Tomcat并發(fā)容量的問題

    這篇文章主要介紹了解決SpringBoot內(nèi)嵌Tomcat并發(fā)容量的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06

最新評論