ThreadLocal内存泄漏

引用 https://www.jianshu.com/p/ee8c9dccc953

一、内存回收机制

当不存在Stack(栈,也就是未结束函数)到Heap的强引用时,会被GC机制回收

二、ThreadLocal

当Stack中的ThreadLocal ref置为null时,因为TreadLocal只剩下弱引用,Heap中的ThreadLocal可以被回收;但是只要线程还存在,其ThreadLocal Map就存在相应的强引用,因此Entry中的Value不能被回收。

具体为一个线程有多个ThreadLocal-Value,其中一些ThreadLocal不使用了(相当于置为null),但是因为线程还未退出,Value仍未被清理。

因此ThreadLocal便有额外的清理机制,对key为null的Map进行判断,将其Value置为null,这样Value所引用的对象才能被释放。

相关推荐
Vincent_Vang2 分钟前
多态 、抽象类、抽象类和具体类的区别、抽象方法和具体方法的区别 以及 重载和重写的相同和不同之处
java·开发语言·前端·ide
qualifying3 分钟前
JavaEE——多线程(3)
java·开发语言·java-ee
Fate_I_C5 分钟前
Kotlin 中的 suspend(挂起函数)
android·开发语言·kotlin
周亚鑫7 分钟前
vue3 js代码混淆
开发语言·javascript·ecmascript
陳103013 分钟前
C++:vector(1)
开发语言·c++
棉晗榜14 分钟前
WPF将程序集里面嵌入的资源文件下载到本机磁盘中,将项目中的文件下载到桌面
开发语言·wpf
花卷HJ16 分钟前
Android 下载管理器封装实战:支持队列下载、取消、进度回调与自动保存相册
android·java
wanghowie18 分钟前
01.01 Spring核心|IoC容器深度解析
java·后端·spring
人道领域21 分钟前
【零基础学java】(Map集合)
java·开发语言
@淡 定21 分钟前
Seata AT模式详细实例:电商下单场景
java