ThreadLocal内存溢出代码演示和原因分析!(6)

remove的秘密


那 remove 方法为什么会有这么大的魔力呢?我们打开 remove 的源码看一下:


public void remove() {
    ThreadLocalMap m = getMap(Thread.currentThread());
    if (m != null)
        m.remove(this);
}


从上述源码中我们可以看出,当调用了 remove 方法之后,会直接将 Thread 中的 ThreadLocalMap 对象移除掉,这样 Thread 就不再持有 ThreadLocalMap 对象了,所以即使 Thread 一直存活,也不会造成因为(ThreadLocalMap)内存占用而导致的内存溢出问题了。


总结


本文我们使用代码的方式演示了 ThreadLocal 内存溢出的问题,严格来讲内存溢出并不是 ThreadLocal 的问题,而是因为没有正确使用 ThreadLocal 所带来的问题。想要避免 ThreadLocal 内存溢出的问题,只需要在使用完 ThreadLocal 后调用 remove 方法即可。不过通过 ThreadLocal 内存溢出的问题,让我们搞清楚了 ThreadLocal 的具体实现,方便我们日后更好的使用 ThreadLocal,以及更好的应对面试。

上一篇:如何导出p12文件


下一篇:[算法题] 安排会议室——贪心算法的应用