首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com ToB IT社区-企服评测·应用市场
»
论坛
›
数据库
›
SQL-Server
›
64.ThreadLocal造成的内存泄漏
返回列表
发新帖
64.ThreadLocal造成的内存泄漏
[复制链接]
发表于 2024-7-12 05:37:48
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
内存泄漏
步调中已动态分配的堆内存,由于某种缘故起因步调为释放和无法释放,造成体系内存的浪费,导致步调运行速率减慢乃至体系崩溃等严峻后果。内存泄漏的堆积终将导致内存溢出。
内存溢出
没有足够的内存提供申请者使用。
ThreadLocal出现内存泄漏的真实缘故起因
内存泄漏的发生跟ThreadLocalMap中的key是否使用弱引用是没有关系的。
内存泄漏发生的真正缘故起因是:
1.没有手动删除这个Entry。只要在使用完ThreadLocal,调用其remove方法删除对应的Entry,就能制止内存泄漏。
2.CurrentThread依然运行。由于ThreadLocalMap是Thread的一个属性,被当火线程所引用,所以它的生命周期跟Thread一样长。那么在使用完ThreadLocal的使用,假如当前Thread也随之执行结束,ThreadLocalMap自然也会被gc回收,从根源上制止了内存泄漏。
综上:
ThreadLocal内存泄漏的根源是,由于ThreadLocalMap的生命周期跟Thread一样长,假如没有手动删除对应key就会导致内存泄漏。
制止内存泄漏有两种办法
1.使用完ThreadLocal,调用其remove方法删除对应的Entry。
2.使用完ThreadLocal,当前Thread也随之运行结束。
相对于第一种方式,第二种方式显然更不好控制,特殊是使用线程池的时候,线程结束时不会烧毁的。
所以,
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
返回列表
忿忿的泥巴坨
+ 我要发帖
登录后关闭弹窗
登录参与点评抽奖 加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表