ThreadLocal
ThreadLocal结构
ThreadLocalMap并非继承Map,而是内部有一个Entry数组(table),Entry继承WeakReference,并有一个value变量指向Obj。
ThreadLocal.get()代码:
导致内存泄露的原因
内存泄漏发生的主要原因是ThreadLocalMap的键是弱引用,而值是强引用。当ThreadLocal对象被垃圾回收器回收时,其对应的键将被移除,但值对象却不会自动被清除。这时值对象会一直存在于ThreadLocalMap中,导致内存泄漏,特别是在长时间运行的服务器应用中。