threadlocal 内存泄漏是怎么造成的
时间: 2023-11-19 14:15:38 浏览: 64
详细分析内部类的发生内存泄漏的原因
ThreadLocal 内存泄漏的原因是因为 ThreadLocalMap 中的 Entry 的 key 引用了 ThreadLocal 对象,而这个 ThreadLocal 对象已经没有任何强引用指向它,但是它还被 ThreadLocalMap 弱引用着,因此没有办法被垃圾回收器回收,从而导致内存泄漏。
具体来说,当一个线程结束后,如果没有手动调用 ThreadLocal 的 remove 方法来清理 ThreadLocalMap 中的 Entry,那么这个 Entry 就会一直存在于 ThreadLocalMap 中,而 Entry 的 key 引用了一个已经没有强引用指向它的 ThreadLocal 对象,这个 ThreadLocal 对象就会成为垃圾对象,但是由于 ThreadLocalMap 弱引用着它,垃圾回收器无法回收它,从而导致内存泄漏。
解决 ThreadLocal 内存泄漏的方法是,在使用完 ThreadLocal 对象后,手动调用 ThreadLocal 的 remove 方法来清理 ThreadLocalMap 中的 Entry。另外,可以使用 ThreadLocal 的子类 InheritableThreadLocal,它可以让子线程从父线程中继承父线程的 ThreadLocal 变量,从而避免了 ThreadLocal 内存泄漏的问题。
阅读全文