ThreadLocal-内存浅析

使用时内存结构

 ThreadLocal可以看作一个工具,它自身并不会存储数据而是作为线程ThreadLocalMap的键值来使用;ThreadLocal和ThreadLocalMap共同做到了数据线程独享同时也解决了某些场景下的线程安全问题(例外:ThreadLocalMap中的value如果是静态或者共享数据仍然存在安全问题)。

 为什么ThreadLocalMap对引用ThreadLocal是弱引用?

假设我们使用的线程是线程池中的核心线程或者是个常驻线程,在使用完threadlocal后,threadlocal会弹出栈此时threadlocal会销毁吗?答案是当然不会除非线程池或者常驻线程销毁,但是如果改为弱引用,即便threadlocal使用完弹出栈,等到gc时thread local因为时弱引用此时一定会被回收,因此对threadlocal的弱引用是为了避免key的内存泄漏问题。

ThreadLocal之remove函数重要性

虽让key能够回收,那么value呢,value可是强引用。假设在使用线程池并且业务中会平凡的使用ThreadLocal假设有成千上万个,这样就会导致threadlocalmap中的value越来越多可能会导致jvm内存耗尽因为强因为不会被回收,因此在使用完ThreadLocal应该及时的调用remove移除这样gc能收回key和value(如果线程自身及时的销毁可以不掉用)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值