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

为什么使用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来临时,就会把这俩对象清理掉啦,美滋滋。

http://www.xdnf.cn/news/2734.html

相关文章:

  • 9.5/Q1,GBD数据库最新高分文章解读
  • 机器学习-08-时序数据分析预测
  • 在移动应用开发中,如何优化JavaScript的性能
  • 【行业特化篇2】金融行业简历特化指南:合规性要求与风险控制能力的艺术化呈现
  • 用Python做有趣的AI项目 6:AI音乐生成器(LSTM Melody Generator)
  • 在 cmd shell 中执行 metasploit vbs payload
  • OpenAvatarChat要解决UnicodeDecodeError
  • 一文掌握Matplotlib绘图
  • PyQt6基础_QThread
  • 亚马逊如何分析竞品
  • 网工笔记-网络层
  • 软件工程(一):黑盒测试与白盒测试
  • 【浙江大学DeepSeek公开课】人类经验与AI算法的镜像之旅
  • 考研系列-计算机组成原理第七章、输入/输出系统
  • 解锁健康密码:养生的多维智慧
  • 【手册】Linux服务器应急排查实战指南
  • 《Learning Langchain》阅读笔记11-RAG(7)索引优化:RAPTOR方法和ColBERT方法
  • C++:BST、AVL、红黑树
  • 惠普P1108打印机信息
  • gre over ipsec (神州数码)
  • 巧记英语四级单词 Unit6-中【晓艳老师版】
  • SpringBoot启动后自动执行方法的各种方式-笔记
  • 【MCP】第三篇:Cline工具链路追踪——解码“协议引擎“的神经传导奥秘
  • Pytest-mark使用详解(跳过、标记、参数 化)
  • 夜莺 v8.0.0-beta.10 部署
  • 新能源汽车声纹监测技术的发展趋势是什么?
  • 机器学习:【抛掷硬币的贝叶斯后验概率】
  • 【MySQL】-- 增删改查操作(1)
  • AI辅助编程-cursor开发煤矿持证上岗管理程序需求与设计篇
  • python tk.text不可编辑