1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| ThreadLocal Key 弱引用存在内存泄露的问题,虽然针对这个问题 JDK 有优化,在 set()/get() 会清除无引用的 value,这种主动清除的方式会有一定的性能消耗。
针对这个问题,Netty 定义 FastThreadLocal ,定义 FastThreadLocalRunnable 在多线程的情况下,线程运行完自动调用 FastThreadLocal.removeAll() 清除相关内存引用(Set<FastThreadLocal<?>>)
@Override
public void run() {
try {
runnable.run();
} finally {
FastThreadLocal.removeAll();
}
}
|