ThreadLocal为什么会导致内存溢出?

解释就是
可以看到 一般定义的 static threadLocal在栈中,但是 每个线程是有一个ThreadLocalMap的。
所以虽然 在entry中 Threadlocal是一个弱引用,但是只是相对于 static threadLocal是,而每个线程自己的map却是强引用着 entry的。所以 线程一直没被销毁 ,对象就不会被垃圾回收从而导致内存泄漏

https://zhuanlan.zhihu.com/p/102571059

由于Thread中包含变量ThreadLocalMap,因此ThreadLocalMap与Thread的生命周期是一样长,如果都没有手动删除对应key,都会导致内存泄漏。

但是使用弱引用可以多一层保障:弱引用ThreadLocal不会内存泄漏,对应的value在下一次ThreadLocalMap调用set(),get(),remove()的时候会被清除。

因此,ThreadLocal内存泄漏的根源是:由于ThreadLocalMap的生命周期跟Thread一样长,如果没有手动删除对应key就会导致内存泄漏,而不是因为弱引用。

ThreadLocal为什么会导致内存溢出?_第1张图片

你可能感兴趣的:(多线程)