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

    心有多大,天有多高,一起奋斗!!
  • 相关阅读:
    dsu on tree
    bzoj3527 [Zjoi2014]力
    bzoj3527 [Zjoi2014]力
    114.遍历文件夹并批量修改文件名
    25.八皇后问题
    24.C语言最全排序方法小结(不断更新)
    112.备忘录设计模式
    110.文件搜索,系统大小获取,以及病毒行为
    109.vprintf vfprintf vscanf vfscanf
    108.sqllite3(C语言数据库库)详解
  • 原文地址:https://www.cnblogs.com/zhaolei1996/p/14889765.html
Copyright © 2011-2022 走看看