ThreadLocal为什么会产生内存泄漏? 1. ThreadLocal 的结构ThreadLocal 的内存泄漏问题和其内部存储结构紧密相关。每个 Thread 对象内部都有一个 ThreadLocalMap ThreadLocalMap 里维护着一个Entry[]哈希表每个Entry节点里面存着一对key与value。Entry节点里的key是弱引用key值里存的值指向的是ThreadLocal对象而Entry节点里的value是普通的强引用赋值是把你自己存进去的值放进去。所以即这个 ThreadLocalMap 的key 是 ThreadLocal 弱引用是实例本身value强引用是我们本身设置的。2. 强弱引用强引用强引用是一种在语法上默认采用的引用比如新new出一个任意的对象只要该对象变量不为null就是持有强引用的。持有强引用的变量无论内存够不够只要不为null都不会被GC垃圾回收。弱引用弱引用是一个WeakReference类WeakReference类创建出来的对象都是弱引用。只被弱引用指向的对象如果被GC垃圾收集器扫描到之后无论此时内存够不够该对象都会成为被回收的垃圾对象会被回收。3. 线程的复用线程复用是 ThreadLocal 内存泄漏很大的问题尤其是在我们实际创建线程时使用的都是线程池使用线程池线程必然会复用。4. ThreadLocal 内存泄漏的原因综上三点的基础我们会发现因为ThreadLocalMap的Entry节点里的key是弱引用value是强引用所以在线程池里一个线程完成线程任务后该线程可能还会被复用所以上一个线程任务的相关值要被清除但是因为key是弱引用会被回收而value是强引用不会被回收并且指向value的key已经被回收value不会再被访问到所以没有办法清除干净会有上一个线程任务的value还被这个线程持有占着内存发生内存泄露。5. 如何避免 ThreadLocal 内存泄漏1.被动清除阅读源码我们会发现set()方法和get()方法内部都内置了考虑会有残留value遗留的问题。所以只要调用get()、set()方法就会有被动清理的可能。2.主动清除可以调用remove()方法即可清除掉这个ThreadLocalMap的Entry[]中的这个Entry节点。

相关新闻

最新新闻

如何把B站缓存的m4s视频转成mp4永久保存?m4s-converter 完整上手指南

如何把B站缓存的m4s视频转成mp4永久保存?m4s-converter 完整上手指南

如何把B站缓存的m4s视频转成mp4永久保存?m4s-converter 完整上手指南 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你有没有过这样…

2026/8/18 12:42:57
信息安全中的“信息泄露”(Information Disclosure)威胁类型,其影响的是**机密性(Confidentiality)**安全属性

信息安全中的“信息泄露”(Information Disclosure)威胁类型,其影响的是**机密性(Confidentiality)**安全属性

信息安全中的“信息泄露”(Information Disclosure)威胁类型,其影响的是**机密性(Confidentiality)**安全属性,常见成因包括越权访问、配置错误、日志暴露、API未授权返回敏感数据等,典型缓解措…

2026/8/18 12:42:57
在 Maya 里调好的材质,一到网页就“翻车“?maya-glTF 导出插件帮你把这条坑趟平

在 Maya 里调好的材质,一到网页就“翻车“?maya-glTF 导出插件帮你把这条坑趟平

在 Maya 里调好的材质,一到网页就"翻车"?maya-glTF 导出插件帮你把这条坑趟平 【免费下载链接】maya-glTF glTF 2.0 exporter for Autodesk Maya 项目地址: https://gitcode.com/gh_mirrors/ma/maya-glTF 一个差点让我加班的周五下午 …

2026/8/18 12:42:57
3DSident 0.9.4 新版实测:一招把 3DS 体检工具变成“系统原生应用“

3DSident 0.9.4 新版实测:一招把 3DS 体检工具变成“系统原生应用“

3DSident 0.9.4 新版实测:一招把 3DS 体检工具变成"系统原生应用" 【免费下载链接】3DSident PSPident clone for 3DS 项目地址: https://gitcode.com/gh_mirrors/3d/3DSident 想摸清一台 3DS 的底细——屏幕是 TN 还是 IPS、电池电压是否正常、机…

2026/8/18 12:42:57
米家游戏启动器 Starward:一个入口管三款游戏,日常管理从 20 分钟缩到 5 分钟

米家游戏启动器 Starward:一个入口管三款游戏,日常管理从 20 分钟缩到 5 分钟

米家游戏启动器 Starward:一个入口管三款游戏,日常管理从 20 分钟缩到 5 分钟 【免费下载链接】Starward Game Launcher for miHoYo - 米家游戏启动器 项目地址: https://gitcode.com/gh_mirrors/st/Starward 周二晚上九点,阿泽坐在电…

2026/8/18 12:42:57
06-Kalman隔帧轨迹预测

06-Kalman隔帧轨迹预测

Kalman 滤波与隔帧检测:轨迹如何在「无测量帧」上继续走 本文只讲一件事:当检测隔几帧才跑一次时,中间帧没有新的人体框测量,跟踪仍能给出连续轨迹,靠的是 Kalman 预测;有测量时再做 更新。 读完后应能独立…

2026/8/18 12:37:57