Java中的WeakHashMap概念原理以及簡單案例
WeakHashMap 概念和原理說明
WeakHashMap使用了軟引用結(jié)構(gòu),它的對象在垃圾回收時會被刪除
注:垃圾回收是優(yōu)先級非常低的線程,不能被顯示調(diào)用,當(dāng)內(nèi)存不足的時候會啟用
下面是 WeakHashMap 的實現(xiàn)原理拆分:
public class WeakHashMap<K,V> extends AbstractMap<K,V> implements Map<K,V> { ... ... // 用于存儲需要清理的引用對象 private final ReferenceQueue<Object> queue = new ReferenceQueue<>(); ... ... // 內(nèi)部Entry繼承自WeakReference,從而有弱引用特性 private static class Entry<K,V> extends WeakReference<Object> implements Map.Entry<K,V> { ... ... } ... ... // 用于移除內(nèi)部不用的Entry來釋放內(nèi)存 private void expungeStaleEntries() { ... ... } ... ... }
WeakHashMap 原理說明
1.每次GC清理對象后,引用對象被放置到 ReferenceQueue 之中
2.每次訪問 WeakHashMap 都會調(diào)用 expungeStaleEntries 遍歷刪除 ReferenceQueue 中引用對象
使用案例
1、緩存中使用
由于 WeakHashMap 是弱引用,因此適合在緩存中使用,當(dāng)內(nèi)存不足GC的時候,會清理不用的引用達(dá)到釋放內(nèi)存的目的
2、不要使用基礎(chǔ)類型作為WeakHashMap的key
我大概理解的是,基礎(chǔ)類型的一定范圍不會被回收 原文:objectMap.put方法執(zhí)行的時候i會被封裝為Integer類型的,Integer保留了-128到127的緩存。
但是對于int來說范圍大很多,因此那些Key <= 127的Entry將不會進(jìn)行自動回收,但是那些大于127的將會被回收,因此最后的尺寸總是會穩(wěn)定在128左右
到此這篇關(guān)于Java中的WeakHashMap概念原理以及簡單案例的文章就介紹到這了,更多相關(guān)Java中的WeakHashMap內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JAVA 格式化JSON數(shù)據(jù)并保存到j(luò)son文件中的實例
這篇文章主要介紹了JAVA 格式化JSON數(shù)據(jù)并保存到j(luò)son文件中的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10透徹理解Java中Synchronized(對象鎖)和Static Synchronized(類鎖)的區(qū)別
這篇文章主要介紹了Java中Synchronized(對象鎖)和Static Synchronized(類鎖)的區(qū)別,希望對大家有所幫助,一起跟隨小編過來看看吧2018-05-05使用 Java 將 byte[] 轉(zhuǎn)換為 File 對象并上
本文展示了如何通過 Java 和 Spring 來處理圖像文件的獲取、保存和上傳,通過 RestTemplate 獲取字節(jié)數(shù)組并將其轉(zhuǎn)換為 File 對象,可以輕松實現(xiàn)從遠(yuǎn)程 URL 獲取文件并將其上傳到外部服務(wù)器,感興趣的朋友一起看看吧2025-03-03Java實現(xiàn)WORD和PDF互相轉(zhuǎn)換以及數(shù)據(jù)填充示例
本文介紹了如何使用Java實現(xiàn)WORD和PDF的互轉(zhuǎn)以及數(shù)據(jù)填充功能,通過導(dǎo)入Aspose庫并使用其工具類,可以輕松實現(xiàn)WORD和PDF模板的填充和轉(zhuǎn)換,需要的朋友可以參考下2025-02-02使用try-with-resource的輸入輸出流自動關(guān)閉
這篇文章主要介紹了使用try-with-resource的輸入輸出流自動關(guān)閉方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07SpringBoot項目集成Flyway進(jìn)行數(shù)據(jù)庫版本控制的詳細(xì)教程
這篇文章主要介紹了SpringBoot項目集成Flyway進(jìn)行數(shù)據(jù)庫版本控制,本文分步驟通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07Spring?Cloud微服務(wù)架構(gòu)Sentinel數(shù)據(jù)雙向同步
這篇文章主要為大家介紹了Spring?Cloud微服務(wù)架構(gòu)Sentinel數(shù)據(jù)雙向同步示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10