全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

为什么ThreadLocal会造成内存泄露? 如何解决

发布时间:2022-09-14 16:58:54
发布人:wjy

  网上有这样一个例子:

为什么ThreadLocal会造成内存泄露1

 

  如果用线程池来操作ThreadLocal 对象确实会造成内存泄露, 因为对于线程池里面不会销毁的线程, 里面总会存在着<threadlocal, localvariable="">的强引用,因为final static 修饰的 ThreadLocal 并不会释放, 而ThreadLocalMap 对于 Key 虽然是弱引用, 但是强引用不会释放,弱引用当然也会一直有值,同时创建的LocalVariable对象也不会释放, 就造成了内存泄露; 如果LocalVariable对象不是一个大对象的话, 其实泄露的并不严重, 泄露的内存 = 核心线程数 * LocalVariable对象的大小;

  所以,为了避免出现内存泄露的情况,ThreadLocal提供了一个清除线程中对象的方法,即 remove,其实内部实现就是调用 ThreadLocalMap 的remove方法:

为什么ThreadLocal会造成内存泄露2

 

  找到Key对应的Entry,并且清除Entry的Key(ThreadLocal)置空,随后清除过期的Entry即可避免内存泄露。

相关文章

新手直播带货怎么做起来?有何技巧?

2023-09-19

做视频创作者怎么赚钱?个人怎么靠流量赚钱?

2023-09-19

怎样投抖加不花钱?别人能看出来吗?

2023-09-19

抖店怎么拦截快递?线下结算是什么?

2023-09-19

抖店平台商户被退店还能退货吗?如何提高评分?

2023-09-19

抖店入驻收费多少?开抖店费用是多少?

2023-09-19
在线咨询 免费试学 教程领取