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年前 (2022-10-20) IP属地:未知
我来回答