聊一聊ThreadLocal内存泄漏的问题

回答任何一个问题的时候应该要遵循:明确题意-->深入浅出-->举例说明-->总结,这四个步骤很重要,可以让你沉着冷静,思路清晰,避免尴尬。

01 —  明确题意

明确题意的意思就是先明确一下面试官的题目,能避免自己理解有误而跑题,可以这样说:ThreadLocal内存泄漏的原因主要是因为ThreadLocal中包含了ThreadLocalMap,然而ThreadLocalMap的对象是在Thread中的,如果Thread没有结束,则ThreadLocalMap一直不会释放,假如ThreadLocalMap中设置了很多值,而且没有手动设置remove(),则可能会造成内存泄露。网上有些网友的答案是因为ThreadLocal作为一个弱引用的key然后造成每次GC的时候会回收掉ThreadLocal,导致无法访问value,然后造成了内存泄漏,这是完全错误的,其实和弱引用没有关系。

02 — 深入浅出

先思考一下,如果每次GC都把ThreadLocal给回收掉,那么业务代码在运行的时候出现GC,ThreadLocal被回收之后,业务代码就会获取不到值,这样就会出现问题。弱引用的定义确实是在GC的时候就会被回收掉,如果ThreadLocal又被其它强引用指向了,则它是不会被回收的,想想我们在使用ThreadLocal的时候,我们是怎么定义并使用他的呢?

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山竹之七语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值