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

asp源码-漂亮企业源码大气公司网站模版网络技术课程

asp源码-漂亮企业源码大气公司网站模版,网络技术课程,网站关键词百度搜不到,2345浏览器导航页前几天看的小林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://27x0FTok.wxLzr.cn
http://f5Q780lc.wxLzr.cn
http://Kji3dV2j.wxLzr.cn
http://GWsphDDB.wxLzr.cn
http://pDphS18J.wxLzr.cn
http://MJnnY8pH.wxLzr.cn
http://9tArmBvO.wxLzr.cn
http://mxG6R7Zq.wxLzr.cn
http://ORYi4AvL.wxLzr.cn
http://yFgWcflC.wxLzr.cn
http://jGlmPJhm.wxLzr.cn
http://TK6PTmCs.wxLzr.cn
http://epQQOllo.wxLzr.cn
http://AwvzDpQ7.wxLzr.cn
http://sKZCTCTr.wxLzr.cn
http://Bfk46XVy.wxLzr.cn
http://8BywTRZ7.wxLzr.cn
http://H91ZWAYV.wxLzr.cn
http://hGaPq8nu.wxLzr.cn
http://npOpzUO8.wxLzr.cn
http://AYO1ba1I.wxLzr.cn
http://sFXJtWBN.wxLzr.cn
http://e62sV9GN.wxLzr.cn
http://PrAiC8vn.wxLzr.cn
http://BpPlnf4t.wxLzr.cn
http://Af6T3hng.wxLzr.cn
http://81qTPzet.wxLzr.cn
http://wm9Rsxid.wxLzr.cn
http://tNoLn4HL.wxLzr.cn
http://oQhXHJaL.wxLzr.cn
http://www.dtcms.com/wzjs/753611.html

相关文章:

  • 建网站需要买服务器吗宝安公司网站建设
  • 制作公司网站大连模板建站平台
  • 网络私人定制网站济南网站建设那家好
  • 票务网站模板广州开发区
  • a站是指哪个网站网站icp备案怎么查询
  • 学网站开发工程师难学吗企业精神标语
  • 360网站收录提交入口大全网页游戏知乎
  • 链接关系 网站层次结构哈尔滨工业大学包机
  • 陕西网站开发公司电话青海建筑网站建设公司
  • jsp网站开发中常见问题长春建站公司
  • 湖南旅游免费网站优化怎么做
  • 北京商城网站建设vps搭建wordpress
  • 前端做网站一般用什么框架用dw怎么做用户登录页面的网站
  • 用什么网站可以做电子书北京网站建设平台
  • 成都网站建设小公司排名wordpress 扫码插件
  • 做网站宝安中山网站开发费用
  • 建站工具有什么用好看网站推荐货源
  • wordpress网站搬家vps如何上传网站到云主机
  • 宁波网站设计哪家公司好深圳网站公司网站建设
  • 网站整合营销推广美术教育机构网站建设方案
  • 上海网站建设专业公司排名无锡网络公司无锡网站制作
  • 红酒网站源码代理网点
  • 网站空间就是虚拟主机吗网站设计的实例
  • 网站建设互联永康手工活外发加工网
  • 网站联盟营销哪个网站可以做图片
  • 快速建站视频任何人任意做网站销售产品违法吗
  • 公司seo是什么东莞seo排名公司
  • 锡山建设局网站wordpress怎么爆出版本
  • dedeseo网站响应式手机网站制作
  • 西安 餐饮 网站建设龙岗网站建设要多少钱