NIUCLOUD是一款SaaS管理后台框架多应用插件+云编译。上千名开发者、服务商正在积极拥抱开发者生态。欢迎开发者们免费入驻。一起助力发展! 广告
每个线程都有一个自己的散列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 值就会一直存在