当前位置: 首页 > news >正文

WeakHashMap原理

        WeakHashMap map = new WeakHashMap();String k = new String("1");map.put(k, 1);System.out.println();k = null;  // 去除对key的强引用System.out.println(map.size());  // 1System.gc();System.out.println(map.size());  // 0

WeakHashMap 中key在没有强引用的时候,如果发送了gc,该key就会被回收。为了保证一致性,该Map中回收方法为expungeStaleEntries。

    private void expungeStaleEntries() {for (Object x; (x = queue.poll()) != null; ) {synchronized (queue) {@SuppressWarnings("unchecked")Entry<K,V> e = (Entry<K,V>) x;int i = indexFor(e.hash, table.length);Entry<K,V> prev = table[i];Entry<K,V> p = prev;while (p != null) {Entry<K,V> next = p.next;if (p == e) {if (prev == e)table[i] = next;elseprev.next = next;// Must not null out e.next;// stale entries may be in use by a HashIteratore.value = null; // Help GCsize--;break;}prev = p;p = next;}}}}

以上代码会遍历引用队列,然后删除已被回收的键值对。该方法会在getTable(获取表),size(获取表大学)、resize(扩容)的时候使用。
在这里插入图片描述
而getTable会在增删改查的时候调用。
在这里插入图片描述
因此,expungeStaleEntries方法会在WeakHashMap增删改查、扩容的地方调用。


http://www.mrgr.cn/news/74751.html

相关文章:

  • 将单色像素值转换成灰阶屏的灰度序列的算法
  • VMware和CentOS 7.6 Linux操作系统的安装使用
  • 《实时流计算系统设计与实现》-Part 2-笔记
  • 【api】java和python联动
  • 【算法一周目】双指针(2)
  • 设计模式之责任链模式(Chain Of Responsibility)
  • 数据结构PTA
  • 【目标检测】【Ultralytics-YOLO系列】Windows11下YOLOV5人脸目标检测
  • nginx代理后jsp如何获取http协议
  • DNS服务器Mac地址绑定与ip网路管理命令(Ubuntu24.04)
  • Oauth2.0
  • Java复习44(PTA)
  • 2024算法基础公选课练习三(DFS1)(1)
  • 全国交通安全日知识竞赛答题投票活动策划
  • 基于AX650N/AX630C部署多模态大模型InternVL2-1B
  • 华为OD机试真题---数组二叉树
  • C# 反射与动态编程
  • arcgis做buffer
  • LeetCode105.从前序与中序遍历构造二叉树
  • 上海亚商投顾:创业板指探底回升 两市成交额缩量5400亿
  • 云计算研究实训室建设方案
  • 蓝桥杯真题——k倍区间
  • 【性能优化】图片性能优化方案
  • Python 绘图工具详解:使用 Matplotlib、Seaborn 和 Pyecharts 绘制散点图
  • 基于Springboot+微信小程序的付费选座自习室小程序 (含源码数据库)
  • JavaScript 对象