加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

ThreadLocal内存泄漏需要注意的

发布时间:2020-12-15 07:15:54 所属栏目:Java 来源:网络整理
导读:? ? ? ?前段时间在网上看到了一篇关于ThreadLocal内存泄漏的文章 于是个人也研究了下ThreadLocal 对象,其原理是: ThreadLocal 定义的变量值 会存储在当前线程的一个map集合中 这个map里面存储的是Entity对象? , Entity对象的key是当前ThreadLocal对象的弱

? ? ? ?前段时间在网上看到了一篇关于ThreadLocal内存泄漏的文章

于是个人也研究了下ThreadLocal 对象,其原理是:

ThreadLocal 定义的变量值 会存储在当前线程的一个map集合中

这个map里面存储的是Entity对象? , Entity对象的key是当前ThreadLocal对象的弱引用,

value则是ThreadLocal变量的值

这就产生了一个问题:

? ? ? ? 如果ThreadLocal变量的强引用丢失了? map里面的弱引会失效? gc就回收ThreadLocal对象

那么 ThreadLocal的value 会在一直在map里面 直到Thread被回收? 却因为key释放了没有办法获得?

?

其实jdk针对此问题也做了一定范围的处理? ?就是key为null的entity会被覆盖或清除

?

当然我们使用的时候也应该注意? 下面的几种用法都是有问题的:

1.同一个变量名多次new

ThreadLocal? a=new ThreadLocal();

.....

a=new ThreadLocal();

?

2.变量局部产生

public void func(){

? ?ThreadLocal a=new ThreadLocal();

}

for(int i=0;i<100;i++){

? ? ThreadLoal b=new ThreadLocal();

}

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读