ThreadLocal 内存泄漏成因与线程池下传递
线上一个接口使用 ThreadLocal 缓存用户上下文,压测时发现 Full GC 后老年代仍持续增长。请说明 ThreadLocal 的 ThreadLocalMap 结构、Entry 为什么用弱引用 key,内存泄漏究竟发生在哪条引用链上;并给出在线程池场景下正确清理与跨线程传递上下文的具体做法(至少两种)。
线上一个接口使用 ThreadLocal 缓存用户上下文,压测时发现 Full GC 后老年代仍持续增长。请说明 ThreadLocal 的 ThreadLocalMap 结构、Entry 为什么用弱引用 key,内存泄漏究竟发生在哪条引用链上;并给出在线程池场景下正确清理与跨线程传递上下文的具体做法(至少两种)。
先自己想 30 秒再看答案,比直接读一遍有用得多。