ThreadLocal存储数据是使用ThreadLocalMap来存的,ThreadLocalMap基于Entry[]实现,存储数据时,本身ThreadLocal作为key来存取value数据。
key内存泄露:
ThreadLocal对象本事就是一个强引用,当方法弹栈后,因为线程池中线程还在,对ThreadLocal引用的Key还在,这会导致这个ThreadLocal无法被回收。
为了解决这个key不能被回收导致的内存泄露问题,key是对ThreadLocal为弱引用。
value的内存泄露问题:
因为key弱引用被回收了,获取不到value,造成了value在内存中但找不到的内存泄露问题
解决:当使用完ThreadLocal后,手动remove。
ThreadLocal使用ThreadLocalMap存储数据,可能导致键值对在方法结束后的内存泄露。ThreadLocal对象作为强引用的key,当线程池中的线程存活时,可能导致其无法被回收。为解决此问题,key被设计为弱引用。然而,这可能导致value的内存泄露,因为key被回收后,value无法被访问。避免这种问题的方法是在使用完ThreadLocal后手动调用remove。
1486

被折叠的 条评论
为什么被折叠?



