ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
每个线程都有一个自己的散列map,每一个entry是<ThreadLocal对象,value> ~~~java static class Entry extends WeakReference<ThreadLocal<?>> { /** The value associated with this ThreadLocal. */ Object value; Entry(ThreadLocal<?> k, Object v) { super(k); value = v; } } ~~~ ![](https://img.kancloud.cn/c3/d2/c3d27fe198758c0fc88c1781f1b2a65b_863x365.png) 如上图,内存泄漏是指entry对value的强引用导致(内存泄漏是泄漏value),value由程序创建并引用 Entry 中的 key 是一个弱引用类型,对于弱引用来说,它只能存活到下次 GC 之前 ; 当前的 ThreadLocalMap 就会新增一条记录,但由于发生了一次垃圾回收,这样就会造成一个结果: key 值被回收掉了,但是 value 值还在内存中,而且如果线程一直存在的话,那么它的 value 值就会一直存在