Skip to content

Threadlocal 是否存在内存泄漏问题?

cxuan edited this page Oct 30, 2020 · 1 revision

ThreadLocalMap 是通过 WeakReference 包装了 TreadLocal ,取的是 TreadLocal 的弱引用 对象

那么在 GC 的时候就会造成 TreadLocal 肯定就会被回收掉。 Entry 对象的 key 就为 null 了,然后 value 却是强引用 无法回收。

如果这个方法又长时间不结束的话,就有会这么一条 强引用的 GCROOT 引用链 的存在:

Thread Ref -> Thread -> ThreaLocalMap -> Entry -> value ; value 就一直不会被回收, 因为它的 另一半 key 已经不存在了,所以它也不会被调用。 这就造成了内存泄漏。

Clone this wiki locally