ThreadLocal的内存泄漏

  • Thread内部维护了一个ThreadLocalMap,ThreadLocalMap的生命周期和Thread一样长。ThreadLocalMap内部是一个map结构,它的key是Threadlocal的弱引用实例,value指向具体的值。如果这个ThreadLocal没有外部强引用指向它,只要发生GC,ThreadLocal就会被回收,这样就导致了map中的value不会被回收,直到线程结束。
  • 发生内存泄漏和强弱引用没有关系,只要删除了ThreadLocalMap中的key,没有清除对应的值,就会发生内存泄漏。所以最好的习惯是使用完ThreadLocal后显示的调用clear