threadlocal原理内存泄漏
时间: 2023-11-07 16:58:36 浏览: 93
美团面试,问了ThreadLocal原理,这个回答让我通过了
5星 · 资源好评率100%
当我们执行stringThreadLocal = null时,变量stringThreadLocal不再指向堆内存,但Entry中的key是弱引用,所以如果当前线程一直存活,堆内存中的ThreadLocal就不会被清理,就会导致内存泄漏问题。即使线程执行结束,执行垃圾回收,Entry中key会为null,但value还是有值的。为了避免内存泄漏问题,可以采取以下方案:
方案a: 自己调用remove方法将不要的数据移除,避免内存泄漏的问题。原理是,在不再使用ThreadLocal对象时,手动调用remove方法来删除对应的Entry。例如,执行stringThreadLocal.remove()来清除不再需要的数据。
方案b: 在不再需要使用ThreadLocal对象时,手动将其置为null。然后再执行stringThreadLocal = null,这样ThreadLocal对象就不再被任何人引用,JVM垃圾回收就会清理掉堆内存中的ThreadLocal对象。
阅读全文