关于弱引用的回收时机的疑惑
来源:4-15 收不回来的value

ych_1997
2020-01-11
ThreadLocalMap.Entry中,key为ThreadLocal,这个ThreadLocal是个弱引用,
感觉这个知识是跟虚拟机有交集的,在此请教一下
-
JVM在什么时机下判断 ThreadLocal 这个引用不再使用了,以下的情况会GC吗?
1.1 情况一:线程池阻塞等待任务
1.2 情况二:service调用链有同步操作,线程较长时间阻塞 -
线程池核心线程正在阻塞等待队列,此时
Thread
中的ThreadLocalMap
对象会不会GC?
2.1 如果会GC
如果GC触发,线程池就失去了set(object)
的object
我可不可以认为:
线程池的场景,就算ThreadLocalMap
GC,
重写initialValue()
方法,get
的时候可以重设一个object进去,
这个object应该是无状态的,如工具类SimpleDateFormat
依旧保证业务逻辑健壮
写回答
1回答
-
无论是线程怎么阻塞,都不代表这个线程会被回收,ThreadLocal也不会被回收。
判断回收的条件,主流是引用可达法法,程序运行从开始,每次引用对象,都将对引用的对象进行连接起来,到最后形成一张网,没有在这张网上的对象则被认为是垃圾对象。
线程阻塞是不影响这张网的。
ThreadLocalMap是Thread的成员变量,是强引用,所以也是不会被回收的。
132020-01-14
相似问题