一 弱引用和内存泄漏
有些程序员在使用 ThreadLocal 的过程中会发现有内存泄漏的情况发生,就猜测到这个内存泄漏跟 Entry 中使用了弱应用的 key 有关系,这个理解是不对的。
二 内存泄漏相关概念
Memory overflow:内存溢出,没有足够的内存提供申请者使用。
Memroy leak:内存泄漏,程序中已分配的堆内存由于某种原因未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重的后果。内存泄漏的堆积将导致内存溢出。
三 弱引用相关概念
Java 中的引用有4种类型:强、弱、软、虚。当前这个问题主要涉及强引用和弱引用。
强引用:就是我们最常用的普通对象引用,只要有强引用指向一个对象,就能表明对象还活着,垃圾回收器就不会回收这种对象。
弱引用:垃圾回收器一旦发现了只有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。
四 如果 key 使用强引用
假设 ThreadLocalMap 中的 key 使用了强引用,那么会出现内存泄漏吗?
此时 ThreadLocal 的内存图如下:

1 假设在业务代码中使用完 ThreadLocal,threadLocal Ref 被回收了。
2 但是因为 threadLocalMap 中的 Entry 强引用了 threadLocal,造成 threadLocal无法被回收。
3&nbs

最低0.47元/天 解锁文章
2536

被折叠的 条评论
为什么被折叠?



