ThreadLocal真的会导致内存泄露吗?

提问者:帅平 问题分类:面试刷题

ThreadLocal真的会导致内存泄露吗?

1 个回答
Rae
Rae 管理员

通过上面的Entry对象中的key设置成弱引用,并且使用get、set或remove方法清理key为null的value值,就能彻底解决内存泄露问题?

答案是否定的。

如下图所示:

假如ThreadLocalMap中存在很多key为null的Entry,但后面的程序,一直都没有调用过有效的ThreadLocal的get、set或remove方法。

那么,Entry的value值一直都没被清空。

所以会存在这样一条强引用链:Thread变量 -> Thread对象 -> ThreadLocalMap -> Entry -> value -> Object。

其结果就是:Entry和ThreadLocalMap将会长期存在下去,会导致内存泄露。

发布于:1个月前 (10-20)
我来回答