WeakHashMap的应用场景

news/2024/12/22 14:31:41/

WeakHashMap,从名字可以看出它是某种 Map。它的特殊之处在于 WeakHashMap 里的entry可能会被GC自动删除,即使程序员没有调用remove()或者clear()方法。

1、适用于缓存场景

更直观的说,当使用 WeakHashMap 时,即使没有显示的添加或删除任何元素,也可能发生如下情况:

调用两次size()方法返回不同的值;

两次调用isEmpty()方法,第一次返回false,第二次返回true

两次调用containsKey()方法,第一次返回true,第二次返回false,尽管两次使用的是同一个key

两次调用get()方法,第一次返回一个value,第二次返回null,尽管两次使用的是同一个对象。

遇到这么奇葩的现象,你是不是觉得使用者一定会疯掉? 其实不然,WeakHashMap 的这个特点特别适用于需要缓存的场景

在缓存场景下,由于内存是有限的,不能缓存所有对象;对象缓存命中可以提高系统效率,但缓存MISS也不会造成错误,因为可以通过计算重新得到。

2、不认为是有效引用的弱引用

要明白 WeakHashMap 的工作原理,还需要引入一个概念 : 弱引用(WeakReference)

我们都知道Java中内存是通过GC自动管理的,GC会在程序运行过程中自动判断哪些对象是可以被回收的,并在合适的时机进行内存释放。

GC判断某个对象是否可被回收的依据是,是否有有效的引用指向该对象。如果没有有效引用指向该对象(基本意味着不存在访问该对象的方式),那么该对象就是可回收的。这里的有效引用 并不包括弱引用

也就是说,虽然弱引用可以用来访问对象,但进行垃圾回收时弱引用并不会被考虑在内,仅有弱引用指向的对象仍然会被GC回收。

WeakHashMap 内部是通过弱引用来管理entry的,弱引用的特性对应到 WeakHashMap 上意味着什么呢?将一对key, value放入到 WeakHashMap 里并不能避免该key值被GC回收,除非在 WeakHashMap 之外还有对该key的强引用


http://www.ppmy.cn/news/52709.html

相关文章

【LeetCode: 5. 最长回文子串 | 暴力递归=>记忆化搜索=>动态规划 => 中心扩展法】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

从零学习SDK(9)SDK的局限

SDK是一种便捷而实用的工具,但软件开发者不能视SDK为万能的解决之道,SDK也有局限性,并且这些局限性可能会十分“致命”。软件开发者在选择SDK产品之前,需要先了解SDK的不足之处。本文将介绍SDK存在的三种问题,以引起软…

收藏!亚马逊29条选品思路!新手小白避坑指南!

亚马逊卖家如何选择产品一直是最令人困惑的问题,甚至比选择目标受众更难。如果他们选择不好,他们就不会卖出,如果他们选择不对,就不会有任何利润空间。那么如何选择产品呢?是从消费者的角度还是从产品的角度&#xff1…

Java项目上线之云服务器环境篇(二)——Tomcat的安装与配置

Java项目上线之云服务器环境篇(二)——Tomcat的安装与配置 Tomcat的选择: 云服务器tomcat的选择最好与本机项目运行的tomcat版本号一致,避免一些不必要的问题。 配置步骤: 1、首先进入云服务器创建好放置tomcat的文件…

LeetCode 18. 四数之和

LeetCode 18. 四数之和 题目描述 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a b c d 的值与 target 相等?找出所有满足条件且不重复的四元组。 注意…

【Apple Studio Display】苹果显示器无法连接Dell 5488

【Apple Studio Display】苹果显示器无法连接Dell 5488 (1)Dell 5488 could not use the Apple studio display via the type-c cable The Dell Latitude 5488 laptop has a USB Type-C port that supports DisplayPort Alternate Mode, which allows …

优化Dynamics 365建议

传统上,旧版 Web 客户端需要某些扩展(如功能区规则)同步返回,这意味着开发人员在从远程源请求数据时被迫使用同步请求。在统一接口中,我们已采取措施确保支持异步通信。例如: 统一接口支持异步功能区规则评…

面向对象(六)-- 接口

目录 1. 接口的概述 2. 接口的特点(重要记忆) 3. 接口的成员特点(重要记忆)