Java面试八股之WeakHashMap的工作原理

  1. 简述WeakHashMap的工作原理

弱键(Weak Keys):

WeakHashMap 的键(keys)是通过 WeakReference 弱引用进行封装的。弱引用是一种特殊的引用类型,它不会阻止所引用的对象被垃圾收集器回收。这意味着,如果一个键对象除了作为 WeakHashMap 的键之外没有任何强引用指向它,那么在进行垃圾回收时,这个键对象可以被当作垃圾回收,即使它还在 WeakHashMap 中。

键值对存储:

WeakHashMap 内部采用类似于 HashMap 的数据结构来存储键值对,即一个哈希表(数组加链表/红黑树)结构。每个键值对(Entry)被封装在一个 Entry 对象中,其中键是通过 WeakReference 引用的,而值则是直接引用的。这样设计使得值的生命周期不受键的影响,即使键被垃圾回收,只要还有其他强引用持有值,值本身不会被回收。

引用队列(ReferenceQueue):

当 WeakHashMap 创建键值对时,不仅为键创建了一个 WeakReference,还将其关联到一个 ReferenceQueue 上。当键对象因为没有其他强引用而被垃圾收集器回收时,其对应的 WeakReference 将被添加到这个引用队列中。

自动清理机制:

WeakHashMap 在进行诸如 get()、put() 等操作时,会检查引用队列中是否有被回收的键的 WeakReference。如果有,说明相应的键值对已经失去了键的引用,此时 WeakHashMap 会从内部哈希表中移除对应的 Entry,释放相关资源。这个过程通常称为“清理”或“整理”。

操作与同步:

与 HashMap 类似,WeakHashMap 的基本操作(如 put()、get()、remove())遵循类似的时间复杂度,即平均情况下接近 O(1),最坏情况下 O(n)。由于清理操作涉及到内部数据结构的修改,因此在多线程环境下,对 WeakHashMap 的操作通常需要适当的同步控制,尽管在 Java 8 及之后版本,JDK 提供了并发友好的 ConcurrentHashMap,但在某些特定场景下,开发者仍可能选择使用 WeakHashMap 并自行管理同步。

 如果大家需要视频版本的讲解,欢迎关注我的B站:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/706605.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计算机毕业设计】基于SSM+Vue的健身房管理系统【源码+lw+部署文档+讲解】

目录 1 绪论 1.1 研究背景 1.2 目的和意义 1.3 论文结构安排 2 相关技术 2.1 SSM框架介绍 2.2 B/S结构介绍 2.3 Mysql数据库介绍 3 系统分析 3.1 系统可行性分析 3.1.1 技术可行性分析 3.1.2 经济可行性分析 3.1.3 运行可行性分析 3.2 系统性能分析 3.2.1 易用性指标 3.2.2 可…

spring-boot-starter-mail 定义邮件工具类EmailHelper

注意 想把这个工具类定义成工具类,所以所有的方法都是静态方法,使用的变量处理参数理所当然都是静态变量期初使用的是Autowired 和 Value进行注解,但是这两个注解是依赖于实例,静态方法是不依赖实例的,所以 from 在发送…

如何在Spring启动的时候执行一些操作

如何在Spring启动的时候执行一些操作 在Spring启动的时候执行一些操作有多种方式。你可以通过实现ApplicationRunner或者CommandLineRunner接口,在Spring Boot应用程序启动后执行特定操作。另外,你也可以使用PostConstruct注解,在Spring Bea…

Dubbo配置上的一些概念

对于dubbo在spring中我们可能看到有如下配置(可参考Schema 配置参考手册 | Apache Dubbo): dubbo:application:id: dubbo-account-examplename: dubbo-account-example# 是否启用 Dubbo 的 QoS(Quality of Service)服…

【Fastadmin】自定义404页面

1.修改config.php // 文件路径:application/config.php// 自定义错误码模板http_exception_template > [// 定义404错误的模板渲染404 > APP_PATH . common/view/404/404.html,], 2.需要把debug关闭才能生效 在.env文件中把debug true,改为…

在springboot项目中自定义404页面

今天点击菜单的时候不小心点开了一个不存在的页面,然后看到浏览器给的一个默认的404页面 后端的程序员都觉得这页面太丑了,那么怎么能自定义404页面呢? 很简单,在我们的springboot的静态资源目录下创建一个error包,然…

UL认证储能电表工商业储能智能计量电表ADL3000-E-B/KC

◉概述 ADL3000-E-B 导轨式多功能电能表,是主要针对电力系统,工矿企业,公用设施的电能统计、管理需求而设计的一款智能仪表,产品具有精度高、体积小、安装方便等优点。集成常见电力参数测量及电能计量及考核管理,提供…

LangChain搭建Agent | 使用initialize_agent

1.create_tool_calling_agent 构建agent,这个方法是过时了吗?官方文档也没更新,官方示例也运行错误 from langchain_core.prompts import ChatPromptTemplate from langchain_core.runnables import ConfigurableField from langchain_core…

ES6中数组新增了哪些扩展?

​🌈个人主页:前端青山 🔥系列专栏:JavaScript篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来JavaScript篇专栏内容:ES6中数组新增了哪些扩展? 目录 一、扩展运算符的应用 二、构造函数新…

(2)双指针练习:复写零

复写零 题目链接:1089. 复写零 - 力扣(LeetCode) 给你一个长度固定的整数数组 arr ,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。 注意:请不要在超过该数组长度的位置写入元素。请对输入…

oppo手机怎样录屏?新手必看指南来了

“有人知道oppo手机怎样录屏吗?刚刚换了新款的oppo手机,它的屏幕显示效果和性能都让我感到非常满意,但是在尝试使用录屏功能时遇到了些困难,找了半天都没找到正确的开启方式,有没有哪位oppo手机用户知道如何打开录屏功…

美港通正规炒股市场沪指收跌0.82% 证券板块调整

5月15日电 15日,A股三大指数集体下挫。上证指数跌0.82%,报3119.9点;深证成指跌0.88%,报9583.54点;创业板指跌0.9%,报1838.89点。沪深京三市成交额7651亿元,其中沪深两市7611亿元,较上日缩量635亿元。沪深两市超3800只个股下跌。 美港通证券以其专业的服务和较低的管理费用在市…