欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中的WeakHashMap概念原理以及簡單案例

 更新時間:2023年09月07日 08:32:43   作者:阿黃Ahuang  
這篇文章主要介紹了Java中的WeakHashMap概念原理以及簡單案例,WeakHashMap使用了軟引用結(jié)構(gòu),它的對象在垃圾回收時會被刪除,垃圾回收是優(yōu)先級非常低的線程,不能被顯示調(diào)用,當(dāng)內(nèi)存不足的時候會啟用,需要的朋友可以參考下

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)存的目的

image

2、不要使用基礎(chǔ)類型作為WeakHashMap的key

我大概理解的是,基礎(chǔ)類型的一定范圍不會被回收 原文:objectMap.put方法執(zhí)行的時候i會被封裝為Integer類型的,Integer保留了-128到127的緩存。

但是對于int來說范圍大很多,因此那些Key <= 127的Entry將不會進(jìn)行自動回收,但是那些大于127的將會被回收,因此最后的尺寸總是會穩(wěn)定在128左右

image

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

相關(guān)文章

最新評論