当前位置:首页 > 内存 > 正文

threadlocal内存泄露

  • 内存
  • 2024-06-28 07:32:26
  • 2174

一、Java养成什么样的编程习惯可以有利于GC作者:RednaxelaFX
链接:


二、ThreadLocal实现原理是什么&有哪些引用类型及使用场景?

对于一个ThreadLocal对象,通常有两个引用指向它:

关键是弱引用,如果没有外部强引用,就会自动回收。该值是一个强引用,引用链如下:

所以该值只有在线程回收时才会被回收。否则该值始终存在,但关闭每个线程是不现实的。在线程池中,大多数线程伴随着系统的整个循环,因此值可能会导致泄漏。

解决方案是在执行set()、get()和remove()时清理ThreadLocalMap:

真正回收值的是方法expungeStaleEntry()Remove和Set方法都会调用此方法。

为了避免内存泄漏,ThreadLocal不仅使用弱引用来管理key,而且每次操作时都会检查key是否被回收,然后回收value。

1.强参考

2.软参考

4