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.mzph.cn/web/12838.shtml

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

相关文章

冥想训练具体方法有哪些|流静冥想

冥想是一种身体的放松和敏锐的警觉性相结合的状态。 每日练习的好处远不止你花在集中注意力的那几分钟。桑托雷利是建在乌斯特的马萨诸塞大学医学院的减压诊所的所长,她也是《自愈》的作者,她说:"冥想是一种工具,通过练习&a…

ubuntu无法远程连接,ssh不可用,ssh远程连接被拒绝的解决方法。启动sshd远程连接

1、用以下命令检查ssh状态 systemctl status sshd2、如果查不到sshd状态,或提示没有ssh,就安装ssh服务器和客户机 $ sudo apt install openssh-server # 安装ssh服务器 $ sudo apt install openssh-client # 安装ssh客户机3、如果不能安装openssh-…

构建安全的GenAI/LLMs核心技术解密之大模型对抗攻击(一)

LlaMA 3 系列博客 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (一) 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (二) 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (三) 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (四) 基于 LlaMA…

云手机的优缺点分析

云手机,作为云计算领域的创新,致力于提供更为灵活的移动设备体验,特别适用于那些希望在不同设备之间无缝切换的用户。虽然云手机带来了一系列优势,但也伴随着一些挑战,比如网络延迟可能会影响用户体验,特别…

网络安全|隐藏IP地址的5种不同方法

隐藏计算机的IP地址在互联网在线活动种可以保护个人隐私,这是在线活动的一种常见做法,包括隐私问题、安全性和访问限制内容等场景。那么如何做到呢?有很5种方法分享。每种方法都有自己的优点和缺点。 1. 虚拟网络 当您连接到虚拟服务器时,您…

openGauss学习笔记-284 openGauss AI特性-AI4DB数据库自治运维-DBMind模式说明-component子命令

文章目录 openGauss学习笔记-284 openGauss AI特性-AI4DB数据库自治运维-DBMind模式说明-component子命令284.1 命令参考openGauss学习笔记-284 openGauss AI特性-AI4DB数据库自治运维-DBMind模式说明-component子命令 该子命令可以用于启动DBMind的组件,包括可用于监控指标的…

Dubbo配置上的一些概念

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

Blender雕刻建模_笔刷

1.雕刻模式 雕刻Scuplt,一种常用的建模方式 -选中物体,进入雕刻模式 -重构网格(修改体素大小,点击重构网格)给物体添加更多面 -选择笔刷,雕刻 -退出雕刻模式 2.重构网格 一种按体积的细分方式&#xf…

openstack部署nova中出现的问题:

[rootcontroller nova]# su -s /bin/sh -c “nova-manage db sync” nova /usr/lib/python2.7/site-packages/pymysql/cursors.py:170: Warning: (1831, u’Duplicate index block_device_mapping_instance_uuid_virtual_name_device_name_idx. This is deprecated and will be…

Springboot+MybatisPlus如何实现带验证码的登录功能

实现带验证码的登录功能由两部分组成::1、验证码的获取 2、登录(进行用户名、密码和验证码的判断) 获取验证码 获取验证码需要使用HuTool中的CaptchaUtil.createLineCaptcha()来定义验证码的长度、宽度、验证码位数以及干扰线…

【JavaScript】严格模式

严格模式(Strict Mode)是一种运行模式,它提供了一种更加严格的语法和错误检查,以帮助开发者编写更可靠、更规范的代码。 什么是严格模式: 严格模式是一种 JavaScript 的执行模式,通过启用严格模式&#xff…

这个notebook集合,赞

这几天在Github上看到一个数据科学仓库,汇总了很多Python notebook代码,主要是数据方向。 项目地址: https://github.com/donnemartin/data-science-ipython-notebooks 其中包括了pandas、numpy、matplotlib、scikit-learn、tensorflow、sp…

【Xilinx】程序可以综合实现,但无法生成bit文件

项目场景: 使用xilinx vivado过程中遇到以下问题: 程序可以综合实现,但无法生成bit文件 问题描述 最终生成bit文件时报错如下 [DRC PDCN-1567] BUFGCTRL_CE_pins_both_connected_to_gnd: For cell ***/rxrecclk_bufg_i placed at site BU…

c++ visualstudio2017 opencv debug源码 windows配置

源码下载和cmake opencv源码和opencv-contribue文件夹的层级目录 在opencv-4.4.0中新建build文件夹,并启动cmake-gui 配置如下,使用vs2017 x64, 需要注意contrib文件夹的设置,如下方蓝色所示,依次点击Configure和Generate 在bu…

半小时搞懂STM32知识点——UART

1.UART 1.1为什么要使用UART这种协议?介绍一下UART及其特点 成本低,硬件简单,数据格式灵活; 低速全双工异步串行通信 1.2 UART数据帧格式? 起始位(1)+数据位(5-8) 校验位…

docker-java 操作docker

部署docker 10分钟学会Docker的安装和使用_docker安装-CSDN博客文章浏览阅读2.5w次,点赞44次,收藏279次。文章目录Docker简介Docker安装Windows安装Linux安装CentOS安装Ubuntu安装最近花了些时间学习docker技术相关,在此做一些总结&#xff0…

12350 安全生产举报投诉特服热线系统解决方案

一、建设背景与系统概述 (一)背景介绍 随着经济的持续发展和社会的不断进步,安全生产问题日益凸显,成为影响社会稳定和人民福祉的重要因素。在此背景下,加强安全生产监管,提高监管效率和质量显得尤为重要…

libasound+libsndfile读取麦克风音频保存为wav文件

依赖库 要完成该功能依赖libasound、libsndfile库,该命令在linux下可以通过命令行安装安装,安装命令如下: sudo apt-get install libasound2-dev sudo apt-get install libsndfile1-dev 代码实现 本文的目的是在linux下利用libasound和li…

wsl2迁移到非c盘

WSL2迁移 系统win11 核心步骤: 0) 以管理员身份运行powershell 查看已经安装的Ubuntu分发版本,我的是默认 wsl -lPS C:\Users\Windows10> wsl -l 适用于 Linux 的 Windows 子系统分发版: Ubuntu (默认) 1)导出到D盘 wsl --export Ubuntu d://ubuntu.tar PS C:\U…

你还在手动加好友?试试这款神器,释放双手自动添加!

你还在手动添加微信好友吗?尤其是在忙碌的时候,手动加好友不仅费时又很容易出错。试试这个自动添加好友神器——个微管理系统,释放你的双手,轻松拓展好友列表! 1、多号同时登录在线 系统支持多个微信号同时登录在线&…