当前位置: 首页 > news >正文

为什么使用ThreadLocal后要调用remove()方法呢?

ThreadLocalMap中包含一个数组,每个节点对应的类名叫Entry,这个类继承WeakReference<ThreadLocal<?>>,entry中有两个属性:key和value。特别需要指出的是key来自于父类中的threadLocal对象。

为了避免内存泄露,使用玩ThreadLocal后,一定要调用它的remove()方法,这样才能保证用完这块entry所占用的内存后,尽早的释放掉内存,最大限度的提高内存的利用率。

虽然ThreadLocal的set()、get()方法也可能会扫描并释放掉这块内存,或者需要很长时间才能释放掉,说不定在这段时间内,内存已经不够用了,出现OOM错误了,所以这种方式是不可靠的。因为使用这种方式的前提条件是GC清理的比较及时、执行set()、get()方法时恰巧能发现这个过期的entry,这样才能保证过期entry对象被及时清理。

清理时,ThreadLocalMap中包含一个名字类似叫cleanup方法,只需要调用这个方法就可以啦。方法里面的操作就是将

entry.value = null; 
entry = null;

这样的话,就不会再引用对应的对象了。下一轮GC来临时,就会把这俩对象清理掉啦,美滋滋。

相关文章:

  • Springboot整合阿里云腾讯云发送短信验证码 可随时切换短信运营商
  • 数智双翼,生态共赢:中钧科技“双帮”如何领航企业全域升级?
  • 【java】接口
  • OpenResty深度解析:从卓伊凡的”隐形主流”论看其深度原理与应用生态-卓伊凡
  • Label Studio 软件介绍及安装使用说明
  • QGIS+mcp的安装和使用
  • 【零基础入门】ASP.NET Core快速搭建第一个Web应用
  • Shiro学习(七):总结Shiro 与Redis 整合过程中的2个问题及解决方案
  • Kotlin DSL 深度解析:从 Groovy 迁移的困惑与突破
  • 加密算法:ed25519和RSA
  • 如何搭建spark yarn 模式的集群集群。
  • 快速搭建对象存储服务 - Minio,并解决临时地址暴露ip、短链接请求改变浏览器地址等问题
  • Matlab自学笔记五十二:变量名称:检查变量名称是否存在或是否与关键字冲突
  • 如何创建并使用极狐GitLab 受保护分支?
  • 第二十节:编码实操题-实现图片懒加载指令
  • Milvus(9):字符串字段、数字字段
  • Linux查看文件列表并按修改时间降序排序
  • Sql刷题日志(day6)
  • QTableView复选框居中
  • K8S学习笔记01
  • 港理大公布多项AI+医工成果,助港建设国际医疗创新枢纽
  • 柴德赓、纪庸与叫歇碑
  • 原创话剧风向标!这个展演上《大宅门》《白鹿原》先后上演
  • 孟泽:我们简化了历史,因此也简化了人性
  • 伊朗阿巴斯港港口爆炸已致47人受伤
  • 中国与肯尼亚签署共同发展经济伙伴关系框架协定