1.内存泄漏
内存溢出: Memory overflow 没有足够的内存提供申请者使用.
内存泄漏: Memory Leak 程序中已经动态分配的堆内存由于某种原因, 程序未释放或者无法释放, 造成系统内部的浪费, 导致程序运行速度减缓甚至系统崩溃等严重结果. 内存泄漏的堆积终将导致内存溢出
2. key=ThreadLocal是强引用
假设ThreadLocalMap中的key使用了强引用, 那么会出现内存泄漏吗?

- 假设在业务代码中使用完ThreadLocal, ThreadLocal ref被回收了
- 但是因为threadLocalMap的Entry强引用了threadLocal(key就是threadLocal), 造成ThreadLocal无法被回收
- 在没有手动删除Entry以及CurrentThread(当前线程)依然运行的前提下, 始终有
强引用链CurrentThread Ref → CurrentThread →Map(ThreadLocalMap)-> entry, Entry就不会被回收( Entry中包括了ThreadLocal实例和value), 导致Entry内存泄漏
也就是说: ThreadLocalMap中的key使用了强引用, 是无法完全避免内存泄漏的

本文深入探讨了ThreadLocal中内存泄漏的原因,分析了强引用与弱引用作为key时的内存泄漏区别,指出了手动删除Entry及线程结束是避免内存泄漏的关键,并解释了为何key应使用弱引用。
最低0.47元/天 解锁文章
1万+

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



