ThreadLocal会不会发生内存泄漏?
下文讲述今天早上同事咨询的一个问题"ThreadLocal会发生内存泄漏"吗?
ThreadLocal会发生内存泄漏由于ThreadLocalMap中使用ThreadLocal的弱引用作为key 当一个ThreadLocal没有外部强引用来引用它 那么系统 GC 的时候,这个ThreadLocal会被回收,则会出现ThreadLocalMap中key为null的Entry 就没有办法访问这些key为null的Entry的value 如果当前线程再迟迟不结束的话 这些key为null的Entry的value就会一直存在一条强引用链 Thread Ref -> Thread -> ThreaLocalMap -> Entry -> value永远无法回收,则造成内存泄漏
ThreadLocal中的get(),set(),remove()的时候都会清除线程ThreadLocalMap里所有key为null的value --------------------------------------------------------------------------------------------- 但是使用static的ThreadLocal,延长了ThreadLocal的生命周期,可能导致的内存泄漏 分配使用了ThreadLocal又不再调用get(),set(),remove()方法,那么就会导致内存泄漏
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。