ThreadLocalMap里面的key值什么情况下才会被回收呀

ThreadLocalMap里面的key值什么情况下才会被回收呀

视频里讲到如果没有外部强引用的话 这里的key值就会被回收

外部强引用指的是什么东西哇...

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,ThreadLocalMap是使用ThreadLocal的弱引用作为Key的,而Value并非弱引用。

当一个ThreadLocal失去强引用,生命周期只能存活到下次gc前,此时ThreadLocalMap中就会出现key为null的Entry,此时的key会被回收,而value是强引用不会被回收,最终造成内存泄露。

祝学习愉快~

好帮手慕小班 2021-04-29 17:43:27

同学你好,1、当使弱引用时,这个对象就可以被回收。

http://img1.sycdn.imooc.com//climg/608a7ef80993db2712830349.jpg

对于只有弱引用的对象来说,只要垃圾回收机制一运行,无论JVM的内存空间是否足够,都会回收该对象占用的内存。

    ​2、强引用指的是:  在Java中,把一个对象赋给一个引用变量,这个引用变量就是一个强引用。比如:

Object object = new Object(); 
String str = “hello”;

只要某个对象有强引用与之关联,JVM必定不会回收这个对象,即使在内存不足的情况下,JVM宁愿抛出错误也不会回收这种对象。

祝学习愉快!

  • 提问者 fever腾腾 #1

    这么说的话 只要我的 ThreadLocal  threadLocal =new ThreadLocal(...)

    这个引用存在的话 key值就不会被回收了

    那什么情况下key值才会被回收而value不被回收呢

    2021-04-29 21:14:48
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师