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

海口有哪几家是做网站的电脑网站做淘宝客

海口有哪几家是做网站的,电脑网站做淘宝客,网站怎么做才有百度权重,附近哪里需要招人前几天看的小林coding的ThreadLocal为什么会导致内存泄漏,但是没有看的太明白,今天趁着有空,来聊聊为什么ThreadLocal会导致内存泄漏 为什么会导致内存泄漏? 弱引用的 ThreadLocal key 可能被回收: 当程序中没有强引…

前几天看的小林coding的ThreadLocal为什么会导致内存泄漏,但是没有看的太明白,今天趁着有空,来聊聊为什么ThreadLocal会导致内存泄漏

为什么会导致内存泄漏?

  • 弱引用的 ThreadLocal key 可能被回收:
    当程序中没有强引用指向某个 ThreadLocal 实例时,这个 ThreadLocal 对象会被 GC 回收(因为它只被 ThreadLocalMap 的弱引用持有)。
//可以看到是弱引用
static class Entry extends WeakReference<ThreadLocal<?>> {/** The value associated with this ThreadLocal. */Object value;Entry(ThreadLocal<?> k, Object v) {super(k);value = v;}}
  • 但是 ThreadLocalMap 中对应的 value 却是强引用(被entry引用):
    value 是线程局部变量真正的对象实例,是强引用,GC 不会回收。

让我们进一步想:为什么value是强引用?当key被回收后,value不是也没有人引用他了吗

1. ThreadLocalMap 结构简单理解

ThreadLocalMap 是一个特殊的哈希表,里面的每个 Entry 是:

static class Entry extends WeakReference<ThreadLocal<?>> {Object value;
}
  • key 是一个弱引用,指向 ThreadLocal 对象。
  • value 是普通的强引用,指向对应线程变量的值。

2. key 被回收后,Entry 中的 key 变成 null

当没有任何强引用指向这个 ThreadLocal 实例时,GC 会回收这个 ThreadLocal 对象,Entry 里的弱引用 key 就变成了 null。

3. 但是 Entry 对象本身和 value 对象还被谁引用?

  • Entry 对象是存储在 ThreadLocalMap 的内部数组里
  • ThreadLocalMap 是线程(Thread)对象的一个成员变量,线程对象一般是强引用(线程还活着)。
  • 也就是说,整个 ThreadLocalMap 被线程强引用,Entry 也被 ThreadLocalMap 强引用
  • 由于 Entry 本身还引用着 value(value 是普通强引用),所以 value 依然是“可达”的。

4. 关键点:value 被 Entry 强引用,Entry 被 ThreadLocalMap 强引用,ThreadLocalMap 被线程强引用

所以:

线程对象(强引用)└─ ThreadLocalMap(强引用)└─ Entry(强引用)├─ key(弱引用,已回收变 null)└─ value(强引用)

value 因此不会被 GC 回收,因为根可达路径依然存在。

5. 为什么会是“孤儿”?

key 已经为 null,没有办法再通过 ThreadLocal 找到它的 value,也就是说这个 Entry 变成“垃圾”条目。

这个垃圾条目没有被清理掉,依然占用内存

6. 什么时候 value 会被回收?

  • 线程结束,ThreadLocalMap 和 Entry 都被回收。
  • 主动调用 ThreadLocal.remove() 清理 Entry,value 的强引用断开。
  • ThreadLocalMap 清理过期(key == null)的 Entry(JDK 会有清理机制,但不一定马上执行)。

总结

key 被回收后,Entry 里的 key 为 null,但 Entry 本身仍被 ThreadLocalMap 引用,而 value 是 Entry 的普通强引用,因此 value 依然可达,不会被回收。

现在对threadLocal内存泄漏的原理是不是会清晰一点。

http://www.yayakq.cn/news/675939/

相关文章:

  • 都什么企业需要网站吗版面设计的概念是什么
  • html源码网站下载之家网上企业推广
  • 建设银行河北分行招聘网站石家庄官网
  • 利用wix建手机网站音乐网站如何做
  • 王烨飞变形计厦门seo关键词排名
  • 常见c2c网站有哪些做微信首图的网站
  • 国外网站如何做推广网站地图怎么做、
  • GTA5浏览器网站建设中网站域名如何使用方法
  • 制作企业网站的流程网络营销服务
  • 个人博客网站怎么赚钱衡水网站建设公司哪家比较好
  • 北京企业网站怎么建设国家企业信用信息查询公示系统
  • 个人印章在线制作网站如何做流量网站
  • 深圳做自适应网站公司广州经济技术开发区
  • 好看网站江门seo
  • 网站建设的参考书籍百度搜索推广
  • 长春 美容 网站建设一个好的网站怎么建设
  • 深圳 企业 网站建设wordpress点文章标题怎么出现错误
  • 无锡网站制作优化排名seo描述是什么意思
  • 安徽建设厅网站施wordpress 完美搬家
  • 榆次住房保障和城乡建设局网站商城建站
  • 贵阳市乌当区住房与城乡建设局网站东莞优化网页关键词
  • 官网网站页面设计南昌网站建设如何
  • 做网站分类链接免费行情软件app网站不下载
  • 网站设计 英文深圳大型网站设计公司
  • 网站图片像素多少常熟做网站的公司
  • 上海华亮建设集团网站宜宾汽车网站建设
  • 在线刷关键词网站排名有创意的宣传方式
  • 备案上个人网站和企业网站的区别加盟网站建设公司
  • 科技公司 网站 石家庄做导购网站多少钱
  • 做棋牌网站在线ppt网站