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所引用的对象才能被释放。

相关推荐
脑子不好真君20 分钟前
手势操控的粒子土星 (Three.js + MediaPipe)
开发语言·javascript·ecmascript
深蓝轨迹21 分钟前
IDEA 中 Spring Boot 配置文件的自动提示消失(无法扫描配置文件)的完整解决方案
java·spring boot·intellij-idea
杀神lwz24 分钟前
Java Json压缩工具类
java·json
虾..25 分钟前
Linux 基于TCP实现服务端客户端通信(线程池)
java·网络协议·tcp/ip
前端小雪的博客.29 分钟前
【Java 基础】变量全解:定义、命名规范、作用域与常量(附代码示例+面试题)
java·作用域·java基础·java入门·变量·常量·java面试题
LXS_35731 分钟前
案例 —— 机房预约系统
开发语言·c++·学习方法
mldlds38 分钟前
【异常解决】Unable to start embedded Tomcat Nacos 启动报错
java·tomcat
代码探秘者40 分钟前
【Java】final、finally、finalize 区别
java·开发语言
yeflx42 分钟前
C++纯虚接口
开发语言·c++
代码探秘者1 小时前
【Java】浅拷贝 VS 深拷贝:核心差异 + 实现方式 + 避坑指南
java·开发语言