立即学习:https://edu.csdn.net/course/play/26270/326866?utm_source=blogtoedu
一、JAVA 的四种引用:
二、ThreadLocal 数据结构
三、ThreadLocal 实现原理
key 是弱引用,被置空后会被回收,那么 Thread -> ThreadLocalMap -> Entry -> Value 这个是强引用链路,ThreadLocalMap 无法再通过 key 来访问 Value,Value 在这里不会被回收,当这样对象过多的占用内存时,就会发生 OOM 异常。
为了解决这个问题:
1. 在使用 ThreadLocal 时,都要在线程全部执行完之后再finally代码块中调用 remove() 方法,清除内存(线程池中使用要尤为注意)
2. 保存在 ThreadLocal 的数据不要太大