ThreadLocal中的WeakReference
Thread对象有一个变量名为threadLocals的ThreadLocalMap对象,里面定义了一个Entry数组,Entry对象弱引用了ThreadLocal。
private void set(ThreadLocal<?> key, Object value) {// We don't use a fast path as with get() because it is at// least as common to use set() to create new entries as// it is to replace existing ones, in which case, a fast// path would fail more often than not.Entry[] tab = table;int len = tab.length;int i = key.threadLocalHashCode & (len-1);for (Entry e = tab[i];e != null;e = tab[i = nextIndex(i, len)]) {ThreadLocal<?> k = e.get();if (k == key) {e.value = value;return;}if (k == null) {replaceStaleEntry(key, value, i);return;}}tab[i] = new Entry(key, value);int sz = ++size;if (!cleanSomeSlots(i, sz) && sz >= threshold)rehash();}
if (k == null) {replaceStaleEntry(key, value, i);return;}
Entry弱引用了ThreadLocal,因此Entry是否存活,不会影响ThreadLocal的生命周期,ThreadLocal在没有其它对象引用后被回收,但是它对应的Entry对象中的value实际还在被Entry引用,如果不清掉Entry,value就会一直强引用,无法释放,那么就可能会内存溢出。(用完要remove()或者下次set()时会检查)
弱引用在下次GC时会被回收掉,前提条件是弱引用的对象不存在其它的强引用和软引用。
实时内容请关注微信公众号,公众号与博客同时更新:程序员星星
ThreadLocal中的WeakReference相关推荐
- WeakReference在ThreadLocal中的使用
1.ThreadLocal定义&作用 定义: ThreadLocal叫做线程本地变量,顾名思义,就是Thread的一个内部变量,这个ThreadLocal是属于某个线程的.就好比是某个人的老婆 ...
- 【Java】强软弱虚四种引用,弱引用在ThreadLocal中的应用
Java中的引用类型 - 强软虚弱 1.强引用(StrongReference) Object strongReference = new Object(); 只要有引用指向它,就不会被回收.当内存空 ...
- ThreadLocal 中的ThreadLocalMap
ThreadLocal 中的ThreadLocalMap
- ThreadLocal中的3个大坑,内存泄露都是小儿科!
我在参加Code Review的时候不止一次听到有同学说:我写的这个上下文工具没问题,在线上跑了好久了.其实这种想法是有问题的,ThreadLocal写错难,但是用错就很容易,本文将会详细总结Thre ...
- 多个线程ThreadLocal中存的是什么
之前所学不精,现在看一下确实是,我ThreadLocal里如果都存的是一个共享变量的话,那么肯定是会两边都相同的.其实现在回头看这些代码就没有了当初学术不精时候的疑惑了,反正也被喷了,趁这个被喷的时间 ...
- 用户登录信息保存在ThreadLocal中
说明 : 简单说下我写这篇文章的来由吧,最近准备新开一个项目前后端分离的,后端通过springboot实现,前段就不说了,那么就会考虑到用户登录成功以后登录信息保存在什么地方,是通过前后端一直传递参数 ...
- 关于Java中的WeakReference类的笔记(弱引用)
前言 今天在看ThreadLocal源码的时候,其中内部类ThreadLocalMap中的Entry继承了WeakReferenc,为了能搞清楚ThreadLocal,只能先了解下了WeakRefer ...
- 关于Java中的WeakReference
WeakReference 阅读原文请访问我的博客BrightLoong's Blog 一. 简介 在看ThreadLocal源码的时候,其中嵌套类ThreadLocalMap中的Entry继承了We ...
- java中的WeakReference(弱引用)
java中的weakReference-弱引用 1.介绍 阅读ThreadLocal源码中,其中嵌套类ThreadLocalMap中的Entry继承了WeakReferenc,为了能搞明白Thread ...
最新文章
- 张北将成规模150万台服务器的云计算产业基地
- java中static作用详解
- Oracle 日志原理剖析
- 2014多校第一场A题 || HDU 4861 Couple doubi
- 【渝粤教育】国家开放大学2019年春季 1332中文学科论文写作 参考试题
- 如何设置多级标题_办公技巧|标题样式amp;多级列表结合,再也不用手动修改1.1、1.2 ...!...
- 生产环境linux下安装两个及两个以上tomcat实践
- java工程如何跑起来的_你编写的Java代码是咋跑起来的?
- 动态图连通性(线段树分治+按秩合并并查集)
- Debian系统关闭iptables的conntrack跟踪
- Android:RGB颜色对照表
- Vivado使用记录(二)下载与固化
- WPS国外版更改语言设置mac
- 用计算机进行坐标反算,反算在测量中的运用(坐标反算桩号)
- Mysql 数据库迁移
- 西安交大计算机考研分数线2020院线,西安交大考研分数线2020院线_全国硕士研究生招生考试网...
- web页面跳转支付宝网页支付
- 数据包络分析——二阶段网络带feedback
- 深入理解Linux内核通知链(Notifier)
- IoT with Mongodb cloud
热门文章
- sfm三维重建源码_OpenMVG源码阅读小记
- 教你如何把女朋友训练得服服帖帖
- 链接两个“名字完全一样”的【动态库】,你会怎么处理?
- C 语言:#ifndef 指令
- 湖南大学21夏训练三14.A除以B
- 爬取某东购买猪肉的用户评论,为生产经营提供了方向性参考
- 伪代码计算机流程图排序数组,排序伪代码总结
- linux redhat nginx,redhat 安装nginx过程完整记录
- linux内核中printk的打印级别
- 高德api中所在位置圆形范围可移动_这个十一黄金周,2000钢铁技术直男如何让高德地图变成一种生活方式...