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…

云手机的优缺点分析

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

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

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

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()来定义验证码的长度、宽度、验证码位数以及干扰线…

这个notebook集合,赞

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

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…

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

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

数据结构——二叉树知识点详解!

引言:本篇博客将详细介绍到数据结构中的又一位大将——二叉树。它也是我们目前学到的第一个非线性的数据结构。并且本章将学到的概念居多,希望大家可以理解并牢记。 更多有关C语言和数据结构知识详解可前往个人主页:计信猫 目录 一&#xff0…

AIGC行业现在适合进入吗

AIGC行业目前正处于快速发展阶段,市场需求正处于爆发期,上大学网(www.sdaxue.com)认为,对于有兴趣的个人或企业而言,现在可能是一个适合进入的时机,以下是具体的分析,供大家参考! 一、AIGC行业前…

网络安全基础知识

目录 1、什么是防火墙?什么是堡垒主机?什么是DMZ? 2、网络安全的本质是什么? 3、计算机网络安全所面临的威胁分为哪几类?从人的角度,威胁网络安全的因素有哪些? 4、网络攻击和防御分别包括那…

zip file is empty

从下找到报错的jar包。展开这个jar包,看下是否正常,正常的是能够展开看到一些文件夹以及里面的类,如下:如果不正常,就删除这个jar包,同时找到这个jar包在本地maven仓库的地址,也删除掉&#xff…

Java面试八股之Collection和Collections的区别

Java中Collection和Collections的区别 Collection 是一个接口,位于 java.util 包中,它是 Java 集合框架的顶层接口之一,代表了一组对象的集合。Collection 接口定义了所有集合类型(如 List、Set、Queue 等)所共有的基…

LeetCode2352相等行列对

题目描述 给你一个下标从 0 开始、大小为 n x n 的整数矩阵 grid ,返回满足 Ri 行和 Cj 列相等的行列对 (Ri, Cj) 的数目。如果行和列以相同的顺序包含相同的元素(即相等的数组),则认为二者是相等的。 解析 针对题目给出的数量级…

cubemx配置stm32f407VET6实现can通信

背景: 项目上需要把原先的TMC5160电机驱动器替换为购买的电机控制模块(该模块采用canopen通信) 移植canopen的前提是can通信正常,现在添加一下can通信(先用标准帧,250K bit/S的波特率测试) 原理…

其它高阶数据结构②_图(概念+存储+遍历+最小生成树)

目录 1. 图的概念 2. 图的存储结构 2.1 邻接矩阵(后面算法所用) 2.2 邻接表 3. 图的遍历 3.1 BFS广度优先遍历 3.2 DFS深度优先遍历 4. 最小生成树 4.1 Kruskal算法 4.2 Prim算法 本篇完。 1. 图的概念 图是由顶点集合及顶点间的关系组成的一…