zoukankan      html  css  js  c++  java
  • ThreadLocal使用弱引用的原因

    threadLocal 中为什么使用弱引用

    为什么ThreadLocalMap和HashMap的key不同,会设计成弱引用呢?我们来分析一下:

    • HashMap被程序员使用存储各类数据,ThreadLocalMap为静态访问修饰符为Default的类,只为线程Thread存储数据(其属性)。

    • 看一下类注释:To help deal withvery large and long-lived usages, the hash table entries use WeakReferences for keys。解释一下:为了帮助处理巨大和长时间存活的对象使用,才会使用弱引用。

    所以总结上面两点,我们就知道。ThreadLocalMap不像HashMap一样被外部使用,可以认为是线程私有的Map,这就意味着:在线程长时间存活的情况下,如果ThreadLocalMap没有使用弱引用,而是使用HashMap的话。当Map中被放入大量大对象和值时,又不及时手动删除K-V的话就很可能会出现应用堆栈溢出的情况。但是如果使用弱引用的话,那么在没有其他强引用的时候,就不需要程序员手动去删除K-V,再一定程度上会降低堆栈溢出的风险(要是KEY都被外部强引用,那也没办法啊)。

    ThreadLocalMap的每次get、set、remove,都会清理过期的Entry,如果不调用remove则会导致value不会被GC回收

    ThreadLocalMap的每次get、set、remove,都会清理过期的Entry(key为null的entry)

    参考文档:

    https://www.cnblogs.com/-beyond/p/13125195.html#ask

    https://segmentfault.com/a/1190000024549972

    心有多大,天有多高,一起奋斗!!
  • 相关阅读:
    Firefox常用web开发插件
    引用MFC指针的获取(转载)
    J2EE的13种核心技术(转载)
    用Visio画ER图的解决方案(转载)
    [导入]六一
    [导入]独自等待
    [导入]随想
    [导入]小聚
    [导入]网站需求分析
    [导入]如何做好网站开发项目需求分析
  • 原文地址:https://www.cnblogs.com/zhaolei1996/p/14889765.html
Copyright © 2011-2022 走看看