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

Java中的WeakHashMap簡析

 更新時間:2023年09月06日 09:16:10   作者:JFS_Study  
這篇文章主要介紹了Java中的WeakHashMap簡析,Map 的子類常見的有 HashMap、Hashtable、ConcurrentHashMap、LinkedHashMap 等,WeakHashMap,直譯就是,虛弱的 HashMap,從名字可得知其和 HashMap 有關(guān),需要的朋友可以參考下

一、什么是 WeakHashMap

Map 的子類常見的有 HashMap、Hashtable、ConcurrentHashMap、LinkedHashMap 等。

WeakHashMap,直譯就是:虛弱的 HashMap。

從名字可得知其和 HashMap 有關(guān),確實如此,WeakHashMap 功能幾乎和 HashMap 一致。

Weak,聯(lián)想java.lang.ref包下的弱引用(WeakReference),由此這里面還牽扯到了一種弱引用結(jié)構(gòu)。

二、HashMap 和 WeakHashMap 的區(qū)別

先看下 WeakHashMap 和 HashMap 中單個對象的組成:

WeakHashMap.Entry 和 HashMap.Node 的不同點在于,WeakHashMap.Entry 繼承了WeakReference。

弱引用的生存期特別短。垃圾回收的時候,一旦發(fā)現(xiàn)弱引用對象,無論當(dāng)前內(nèi)存空間是否充足,都會將弱引用回收。

想象一下如下場景:

  1. 調(diào)用兩次 size():第一次為 10,第二次就為 8 了。
  2. 兩次調(diào)用 isEmpty():第一次返回 false,第二次返回 true。
  3. 兩次調(diào)用 containsKey():第一次返回 true,第二次返回 false。
  4. 兩次調(diào)用 get():第一次返回一個 value,第二次返回 null。

三、使用場景

在如今的并發(fā)泛濫的大環(huán)境下,大家應(yīng)該都用過緩存,緩存都是放在內(nèi)存中的,而內(nèi)存幾乎是計算機中最寶貴也是最稀缺的資源,所以需要謹(jǐn)慎的使用,不然很容易就出現(xiàn) OOM。

緩存的主要作用是為了更快的處理業(yè)務(wù)、降低服務(wù)器的壓力,那么就要保證緩存命中率,這里假設(shè)整個緩存是一個 key-value 結(jié)構(gòu)的(以鍵值對緩存為例),HashMap 作為強引用對象在沒有主動將 key 刪除時是不會被 JVM 回收的,這樣 HashMap 中的對象就會越積越多直到 OOM 錯誤;

那么如何做到既讓緩存的命中率高又不占用那么多的內(nèi)存,這里就可以采用 WeakHashMap,當(dāng)然不會有 HashMap 100% 的命中率(假設(shè)內(nèi)存足夠),但是在保證程序正常的前提下更好的實現(xiàn)了緩存這套解決方案。

WeakHashMap 內(nèi)部是通過弱引用來管理 Entry 的,弱引用的特性對應(yīng)到 WeakHashMap 上意味著什么呢?

將一對 key-value 放入到 WeakHashMap 里并不能避免該 key 值被 GC 回收(除非在 WeakHashMap 之外還有對該 key 的強引用),故內(nèi)存問題也可以解決。

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

相關(guān)文章

  • GraphQL入門總體創(chuàng)建教程

    GraphQL入門總體創(chuàng)建教程

    這篇文章主要為大家介紹了GraphQL入門總體創(chuàng)建教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • springmvc處理模型數(shù)據(jù)Map過程解析

    springmvc處理模型數(shù)據(jù)Map過程解析

    這篇文章主要介紹了springmvc處理模型數(shù)據(jù)Map過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • Java禁止使用finalize方法

    Java禁止使用finalize方法

    這篇文章主要介紹了Java禁止使用finalize方法,需要的朋友可以參考下
    2017-10-10
  • Java自定義線程池的實現(xiàn)示例

    Java自定義線程池的實現(xiàn)示例

    本文主要介紹了Java自定義線程池的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Java使用UTF-8或GBK編碼后還是亂碼問題的解決辦法

    Java使用UTF-8或GBK編碼后還是亂碼問題的解決辦法

    在java中處理字符時,經(jīng)常會發(fā)生亂碼,下面這篇文章主要給大家介紹了關(guān)于Java使用UTF-8或GBK編碼后還是亂碼問題的解決辦法,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • 配置tjxCold(idea效率插件)的模版教程詳解

    配置tjxCold(idea效率插件)的模版教程詳解

    這篇文章主要介紹了配置tjxCold(idea效率插件)的模版教程詳解,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • java8中定時任務(wù)最佳實現(xiàn)方式(實現(xiàn)原理)

    java8中定時任務(wù)最佳實現(xiàn)方式(實現(xiàn)原理)

    這篇文章主要介紹了java8中定時任務(wù)最佳實現(xiàn)方式,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-12-12
  • Java Agents代理是什么

    Java Agents代理是什么

    Java代理Agents通過提供使我們能夠侵入JVM中正在運行的Java程序的服務(wù),在最底層工作。Java的這一強大但不可思議的部分具有在錯誤操作時使JVM崩潰的能力。本文簡要介紹了這個概念,并介紹了它的工作原理。需要的朋友可以參考下面文章的具體內(nèi)容
    2021-09-09
  • Java線程組操作實例分析

    Java線程組操作實例分析

    這篇文章主要介紹了Java線程組操作,結(jié)合實例形式分析了ThreadGroup類創(chuàng)建與使用線程組相關(guān)操作技巧,需要的朋友可以參考下
    2019-09-09
  • Java實現(xiàn)圖片淡入淡出效果

    Java實現(xiàn)圖片淡入淡出效果

    在現(xiàn)代圖形用戶界面和游戲開發(fā)中,**圖片淡入淡出(Fade In/Out)**是一種常見且實用的視覺過渡效果,它可以用于啟動畫面、場景切換、輪播圖、提示框彈出等場景,通過本項目,您將全面了解 Java 上實現(xiàn)淡入淡出效果的各個要點,需要的朋友可以參考下
    2025-05-05

最新評論

迁安市| 宁晋县| 五河县| 高唐县| 林口县| 林芝县| 宿松县| 易门县| 祁门县| 乌什县| 治县。| 平罗县| 扶沟县| 刚察县| 伊金霍洛旗| 得荣县| 香港 | 云霄县| 高唐县| 宁夏| 苏尼特左旗| 双柏县| 东至县| 耿马| 天台县| 正镶白旗| 达孜县| 临武县| 蒲城县| 岳阳县| 长沙县| 通州市| 亚东县| 天全县| 安平县| 彝良县| 溆浦县| 临夏市| 长沙市| 福海县| 汝阳县|