ThreadLocal内存泄漏问题

内存泄漏与内存溢出的区别:
内存泄漏:
使用的时候申请了内存,但该内存一直无法被释放,比如创建了ThreadLocal对象后,添加了数据此时有两个栈针指向new ThreadLocal对象,当把ThreadLocal栈针值置为空时,ThreadLocalMap中的键值也会变为空,因此内存无法被释放,所以会产生内存泄漏问题。需要注意的是,ThreadLocalMap中的键存放的是指针,因此当ThreadLocal栈针为空时,ThreadLocalMap也会为空。
内存溢出:
使用的时候申请了内存,发现内存不足,就会报错内存溢出问题。
每个线程都有自己独立的ThreadLocalMap对象,key为ThreadLocal,value为变量值。key为ThreadLocal作为Entry对象中的key,是弱引用,当ThreadLocal指向null时,Entry对象中的key也会变为null,该对象一直无法被垃圾机制回收,一直占用系统内存,有可能造成内存泄漏问题。
ThreadLocal如何防御内存泄漏问题
源码中已经帮我们处理好了,我们只需要调用remove或set方法即可。
1 每次调用remove方法会将不需要的数据移除,也就是ThreadLocalMap中键为空的数据移除;
2 每次set方法操作之前会校验key值为空的情况
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值