1 /**
* Reference queue for cleared WeakEntries
*/
// 所有Entry在构造时都传入该queue
private final ReferenceQueue<Object> queue = new ReferenceQueue<>();
/**
* Expunges stale entries from the table.
*/
private void expungeStaleEntries() {
for (Object x; (x = queue.poll()) != null; ) {
synchronized (queue) {
// e 为要清理的对象
@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 循环遍历冲突链
while (p != null) {
Entry<K,V> next = p.next;
if (p == e) {
if (prev == e) //表示x是桶链表的第一个元素
table[i] = next;
else
prev.next = next; //跳过x元素
// Must not null out e.next;
// stale entries may be in use by a HashIterator
// 可以看到这里把value赋值为null,来帮助 GC 回收强引用的value
e.value = null; // Help GC
size--;
break;
}
prev = p;
p = next;
}
}
}
}

最新文章

  1. MyBatis与Hibernate的比较
  2. 跨平台的.NET运行环境 Mono 3.2发布
  3. IOS高德地图逆地理编码定位+网络判断
  4. nginx配置入门
  5. Extjs文本输入框
  6. DATASNAP 自增长字段问题
  7. [jQuery1.9]Cannot read property ‘msie’ of undefined错误的解决方法
  8. Java基础(2)-基础类型
  9. 数十种TensorFlow实现案例汇集:代码+笔记(转)
  10. SpringBoot入门教程(三)通过properties实现多个数据库环境自动切换配置
  11. Java高并发--安全发布对象
  12. 设计模式のFlyweight(享元模式)----结构模式
  13. python 离散序列 样本数伸缩(原创)
  14. Kubernetes基础:编排调度的那些Controllers
  15. Python 基础 Python是什么
  16. InnoDB存储引擎介绍-(6) 一. Innodb Antelope 和Barracuda区别
  17. 解决sublime的中文乱码
  18. 【Unity】4.7 摄像机
  19. mysql 解除安全模式
  20. node.js 连接 sql server 包括低版本的sqlserver 2000

热门文章

  1. LinkedList源码浅析(jdk1.8)
  2. vue的增删改查
  3. Android - TabHost 与 Fragment 制作页面切换效果
  4. 【Vue】详解Vue组件系统
  5. maven - 引用本地jar,进行jar包移动
  6. 机器学习 —— 基础整理(七)前馈神经网络的BP反向传播算法步骤整理
  7. linux 在jetty中部署web工程
  8. Linux安装搜狗输入法教程
  9. Asp.Net MVC-4-过滤器1:认证与授权
  10. ubuntu上安装nginx+mysql+php5-fpm(PHP5 - FastCGI Process Manager)