并发面试题:ThreadLocal会出现内存泄漏吗?

并发面试题:ThreadLocal会出现内存泄漏吗?
不恰当的使用ThreadLocal会造成内存泄漏的问题。主要是因为线程的私有变量ThreadLocalMap里面的key是一个弱引用。而弱引用的特性就是不管是否存在直接引用的关系,当成员变量ThreadLocal没有其他强引用关系的时候,这个时候对象就会被GC回收。从而导致key会变为null,造成这块内存永远无法被访问,出现内存泄漏的问题。
规避内存泄漏的问题,我认为有两个解决方案。第一个是扩大成员变量ThreadLocal的作用域,避免被GC回收。第二个就是每次使用完ThreadLocal以后,就调用remove()方法去移除对应的数据。
第一种解决方案虽然不会造成key为null的现象,但是后续线程不在继续访问这个key,也就会导致这个内存一直占用不被释放,最后也会造成内存溢出的问题。所以说最好的解决方式,是在实际使用完以后,调用remove()方法去移除这个数据。

你可能感兴趣的:(java,开发语言)