为什么ThreadLocal导致内存泄露的概率非常低?

提问者:帅平 问题分类:面试刷题
为什么ThreadLocal导致内存泄露的概率非常低?
1 个回答
玖墨
玖墨
首先ThreadLocal被两种引用指向
1):ThreadLocalRef->ThreadLocal(强引用)
2):ThreadLocalMap Entry key ->ThreadLocal(弱引用)

只要ThreadLocal没被回收(使用时强引用不置null),那ThreadLocalMap Entry key的指向就不会在GC时断开被回收,也没有内存泄露一说法
通过ThreadLocal了解实现后,又知道ThreadLocalMap是依附在Thread上的,只要Thread销毁,那ThreadLocalMap也会销毁
非线程池环境下,也不会有长期性的内存泄露问题
而ThreadLocal实现下还做了些”保护“措施,如果在操作ThreadLocal时,发现key为null,会将其清除掉
所以,如果在线程池(线程复用)环境下,如果还会调用ThreadLocal的set/get/remove方法
发现key为null会进行清除,不会有长期性的内存泄露问题
发布于:1年前 (2023-03-16) IP属地:四川省
我来回答