ThreadLocal内存泄露的问题

时间:2023-5-25    作者:z    分类: 开发日记


ThreadLocal存储数据是使用ThreadLocalMap来存的,ThreadLocalMap基于Entry[]实现,存储数据时,本身ThreadLocal作为key来存取value数据。

key内存泄露:

ThreadLocal对象本事就是一个强引用,当方法弹栈后,因为线程池中线程还在,对ThreadLocal引用的Key还在,这会导致这个ThreadLocal无法被回收。
为了解决这个key不能被回收导致的内存泄露问题,key是对ThreadLocal为弱引用。

value的内存泄露问题:

因为key弱引用被回收了,获取不到value,造成了value在内存中但找不到的内存泄露问题
解决:当使用完ThreadLocal后,手动remove。

标签: 面试 java基础