弱引用什么时候被回收_面试官:ThreadLocal为什么会发生内存泄漏?
时间: 2023-07-21 19:33:24 浏览: 134
java面试题
弱引用在垃圾回收时会被回收,即使该对象有弱引用指向它,只要没有强引用指向它,它就会被回收掉。
ThreadLocal会发生内存泄漏的情况是因为ThreadLocalMap中的Entry持有ThreadLocal对象的强引用,而ThreadLocalMap又被Thread强引用,如果ThreadLocal没有被显式地移除,那么ThreadLocal对象就会一直存在于ThreadLocalMap中,而ThreadLocalMap又会一直存在于Thread中,这就导致了ThreadLocal对象无法被垃圾回收,从而发生内存泄漏。为了避免这种情况,我们需要在使用完ThreadLocal之后及时将其从ThreadLocalMap中移除,可以通过调用remove方法或者使用Java8中的弱引用来解决这个问题。
阅读全文