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

    心有多大,天有多高,一起奋斗!!
  • 相关阅读:
    Elasticsearch 快速入门
    Linux 非互联网环境安装依赖包
    linux 安装mysql(rpm文件安装)
    Nginx安装与配置文件nginx.conf详解
    Linux 知识
    MySQL Windows安装连接
    post请求body格式
    MySQL 数据库备份
    SOAP与restful webservice
    大数据架构工具hadoop
  • 原文地址:https://www.cnblogs.com/zhaolei1996/p/14889765.html
Copyright © 2011-2022 走看看