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

Java中的WeakHashMap概念原理以及簡(jiǎn)單案例

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

WeakHashMap 概念和原理說(shuō)明

WeakHashMap使用了軟引用結(jié)構(gòu),它的對(duì)象在垃圾回收時(shí)會(huì)被刪除

注:垃圾回收是優(yōu)先級(jí)非常低的線程,不能被顯示調(diào)用,當(dāng)內(nèi)存不足的時(shí)候會(huì)啟用

下面是 WeakHashMap 的實(shí)現(xiàn)原理拆分:

public class WeakHashMap<K,V> extends AbstractMap<K,V> implements Map<K,V> {
    ... ...
    // 用于存儲(chǔ)需要清理的引用對(duì)象
    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來(lái)釋放內(nèi)存
    private void expungeStaleEntries() { ... ... }
    ... ...
}

WeakHashMap 原理說(shuō)明

1.每次GC清理對(duì)象后,引用對(duì)象被放置到 ReferenceQueue 之中

2.每次訪問(wèn) WeakHashMap 都會(huì)調(diào)用 expungeStaleEntries 遍歷刪除 ReferenceQueue 中引用對(duì)象

使用案例

1、緩存中使用

由于 WeakHashMap 是弱引用,因此適合在緩存中使用,當(dāng)內(nèi)存不足GC的時(shí)候,會(huì)清理不用的引用達(dá)到釋放內(nèi)存的目的

image

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

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

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

image

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

相關(guān)文章

最新評(píng)論