ThreadLocal

1.每条线程都有一个ThreadLocalMap对象,而可以有多个threadlocal对象存放在map中。

2.放在map中的key是WeakReference<ThreadLocal<?>>,也就是ThreadLocal的弱引用。

3.ThreadLocalmap会把那些过期的key设置为null,并且删除那些key为null的值。

4.ThreadLocalmap的key是弱引用,也就是说弱引用在没有被其他强引用所引用,gc就会回收。而value是强引用,如果用线程池技术,该线程一直没有结束,value一直没办法被回收。所以key为null的entry的value就一直占据内存,造成内存泄露。

5.因为上述的原因,在ThreadLocal这个类的get()、set()、remove()方法,均有实现回收 key 为 null 的 Entry 的 value所占的内存。所以,为了防止内存泄露(没法访问到的内存),在不会再用ThreadLocal的线程任务末尾,调用一次 上述三个方法的其中一个即可,一般使用remove。

相关推荐
Aesopcmc4 分钟前
Maven打包时指定输出路径、以时间戳命名包名和路径名,结合IDEA以指令脚本方式动态配置输出目录
java·自动化·maven·intellij-idea
weixin_4296302613 分钟前
第6章 支持向量机
算法·机器学习·支持向量机
SweetCode14 分钟前
C++ 实现大数加法
开发语言·c++·算法
王哈哈^_^15 分钟前
【数据集】【YOLO】【目标检测】共享单车数据集,共享单车识别数据集 3596 张,YOLO自行车识别算法实战训推教程。
人工智能·算法·yolo·目标检测·计算机视觉·视觉检测·毕业设计
蓝-萧1 小时前
springboot系列--自动配置原理
java·后端
学到头秃的suhian1 小时前
JVM-类加载机制
java·jvm
CodeWizard~1 小时前
AtCoder Beginner Contest 430赛后补题
c++·算法·图论
大大dxy大大1 小时前
机器学习-KNN算法示例
人工智能·算法·机器学习
bobogift2 小时前
【玩转全栈】----Django基本配置和介绍
java·后端