首页 > 其他 > 详细

ThreadLocal内存泄漏

时间:2019-08-27 23:53:13      阅读:63      评论:0      收藏:0      [点我收藏+]

原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11421437.html

 

内存泄漏

内存泄漏是指不再使?的对象?法得到及时的回收,持续占?内存空间,从?造成内存空间的浪费。

 

内存溢出

内存溢出则是发?了OutOfMemoryException,内存溢出的情况有很多,例如堆内存空间不?,栈空间不?,还有?法区空间不?等都会导致内存溢出。

 

内存泄漏与内存溢出的关系

内存泄漏很容易导致内存溢出,但内存溢出不?定是内存泄漏导致的。 

 

ThreadLocal内存泄漏

ThreadLocal是基于ThreadLocalMap实现的,这个Map的Entry继承了WeakReference,?Entry对象中的key使?了WeakReference封装,也就是说Entry中的key是?个弱引?类型,?弱引?类型只能存活在下次GC之前。

技术分享图片

如果?个线程调?ThreadLocal的set设置变量,当前ThreadLocalMap则会新增?条记录,但由于发?了?次垃圾回收,此时的key值就会被回收,?value值依然存在内存中,由于当前线程?直存在,所以value值将?直被引?。

这些被垃圾回收掉的key就会?直存在?条引?链的关系:Thread -> ThreadLocalMap -> Entry -> value。这条引?链会导致Entry不会被回收,value也不会被回收,但Entry中的key却已经被回收的情况发?,从?造成内存泄漏。

我们只需要在使?完该key值之后,将value值通过remove?法remove掉,就可以防?内存泄漏了。

 

Reference

https://time.geekbang.org/column/article/109201

 

ThreadLocal内存泄漏

原文:https://www.cnblogs.com/agilestyle/p/11421437.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!