内存泄露原因找到了,罪魁祸首是Java TheadLocal( 三 )
比较两种情况 , 我们可以发现:由于ThreadLocalMap的生命周期跟Thread一样长 , 如果都没有手动删除对应key , 都会导致内存泄漏 , 但是使用弱引用可以多一层保障:弱引用ThreadLocal被清理后key为null , 对应的value在下一次ThreadLocalMap调用set、get、remove的时候可能会被清除 。
因此 , ThreadLocal内存泄漏的根源是:由于ThreadLocalMap的生命周期跟Thread一样长 , 如果没有手动删除对应key就会导致内存泄漏 , 而不是因为弱引用 。
ThreadLocal最佳实践通过前面几小结我们分析了ThreadLocal的类设计以及内存模型 , 同时也重点分析了发生内存泄露的条件和特定场景 。 最后结合项目中的经验给出建议使用ThreadLocal的场景:
- 当需要存储线程私有变量的时候 。
- 当需要实现线程安全的变量时 。
- 当需要减少线程资源竞争的时候 。
答案就是:每次使用完ThreadLocal , 建议调用它的remove()方法 , 清除数据 。
另外需要强调的是并不是所有使用ThreadLocal的地方 , 都要在最后remove() , 因为他们的生命周期可能是需要和项目的生存周期一样长的 , 所以要进行恰当的选择 , 以免出现业务逻辑错误!
-- END --
日常求赞:你好技术人 , 先赞后看养成习惯 , 保持初心相信技术 。
【内存泄露原因找到了,罪魁祸首是Java TheadLocal】作者:爱笑的架构师链接:来源:掘金著作权归作者所有 。 商业转载请联系作者获得授权 , 非商业转载请注明出处 。
- 控制|正弦电气科创板IPO过会,需说明与前员工设立或控制的经销商交易的原因及合理性
- 换头像|从不换“头像”的人,多半都是这几张原因,你是哪一种?
- 试试|手机内存不够用,咋办?试试关闭微信这两步操作,轻松腾出几个G
- 内容|浅谈内容行业的一些规律和壁垒,聊聊电商平台孵化小红书难点(外部原因)
- 手机|手机发热怎么办?手机发烫的解决办法及原因
- 操作|动用军队“挖”比特币!委内瑞拉秀出神操作,背后原因令人心酸
- 最贵|苹果坚持自研原因曝光,iPhone12最贵部件只能靠购买,比A14贵1倍
- 分析师|真香定律或再被验证,iPhone12将大卖,分析师给出两个原因
- 值得|千元价位,大容量电池,大内存,双模5G,你值得拥有!
- 高通|为什么iphoneXR和iphoneXS信号不稳定?原因正式被确认,望周知!
