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

Java中的WeakHashMap簡析

 更新時(shí)間: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),確實(shí)如此,WeakHashMap 功能幾乎和 HashMap 一致。

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

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

先看下 WeakHashMap 和 HashMap 中單個(gè)對(duì)象的組成:

WeakHashMap.Entry 和 HashMap.Node 的不同點(diǎn)在于,WeakHashMap.Entry 繼承了WeakReference。

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

想象一下如下場景:

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

三、使用場景

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

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

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

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

將一對(duì) key-value 放入到 WeakHashMap 里并不能避免該 key 值被 GC 回收(除非在 WeakHashMap 之外還有對(duì)該 key 的強(qiáng)引用),故內(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)建教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • springmvc處理模型數(shù)據(jù)Map過程解析

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

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

    Java禁止使用finalize方法

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

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

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

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

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

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

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

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

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

    Java Agents代理是什么

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

    Java線程組操作實(shí)例分析

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

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

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

最新評(píng)論

金湖县| 前郭尔| 抚州市| 山西省| 内江市| 晋宁县| 东光县| 台北县| 临江市| 沁水县| 武威市| 亳州市| 敖汉旗| 远安县| 成安县| 龙泉市| 苏尼特左旗| 积石山| 滨州市| 玛沁县| 台南市| 郯城县| 安乡县| 西充县| 吉木乃县| 华池县| 马关县| 巩留县| 达拉特旗| 浦江县| 上杭县| 安仁县| 青浦区| 浮山县| 米易县| 凭祥市| 营山县| 阿勒泰市| 稻城县| 牡丹江市| 山东省|