java ThreadLocal内存泄漏如何解决
作者:慢热型
时间:2023-04-27
浏览:0
1、泄漏实例ThreadLocalMap的静态内部类Entry:staticclassEntryextendsWeakReference
1、泄漏实例
ThreadLocalMap的静态内部类Entry:
static class Entry extends WeakReference> { /** The value associated with this ThreadLocal. */ Object value; Entry(ThreadLocal> k, Object v) { super(k); value = v; } }
ThreadLocalMap使用静态内部类Entry实现
正因为ThreadLocalMap以ThreadLocal的弱引用作为key,在这个ThreadLocal没有外部强引用的时候,会被GC。这时候,ThreadLocalMap会出现一个key为null的Entry,理所当然的,这个Entry的value将永远没办法被访问到。
在这种情况下,如果当前工作线程一直没有结束,那这个key为null的value因为被Entry强引用,而Entry被当前线程的ThreadLocalMap强引用,导致这个value永远无法被GC,造成内存泄漏。
2、解决办法
ThreadLocalMap的cleanSomeSlots(),expungeStaleEntry()方法都能清除key为null的value。 在ThreadLocal的set(),get(),remove()方法中,都会调用cleanSomeSlots()或expungeStaleEntry()来清除ThreadLocalMap中所有key为null的value。
作者最新文章
win10笔记本外出联网如何阻止自动下载更新包
2026-10-06 11:33
photoshop智能对象不能直接编辑
2026-10-05 13:52
3dmax动画制作教程视频零基础入门步骤讲解
2026-09-23 12:06
CPU硅脂涂抹方法图解及正确操作步骤
2026-09-22 15:23
网易2026年Q2财报:营收301亿元,游戏收入增10%,三款重点新游披露进展
2026-09-08 17:51
上一篇:
MySQL如何查询数据库中有多少张表?
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多










































