内存泄漏

想问一道题:ThreadLocal是如何导致内存泄漏的,看了好多文章,我的答案可能是:
首先内存泄漏:分配的内存无法给垃圾回收器正确的回收,程序占用额外内存,直到可能导致系统性能下降
ThreadLocal内存泄漏:1. Entry中的value被强引用着,无法被回收2. ThreadLocal应用被设置为null了,ThreadLocal实例被回收了,没人管它对应的Entry了;看了好多,我太笨了,求求大神解释一下,话说内存这莫脆弱嘛?
全部评论
我是雷锋
6 回复 分享
发布于 2023-10-02 12:00 四川
还有还有,ThreadLocalMap中的key设置为弱应用的目的也是为了避免内存泄露的嘛?谢谢各位
3 回复 分享
发布于 2023-09-24 11:13 陕西
threadlocal被回收了,但是current thread ref还存在 value值无法清除 导致内存泄漏
1 回复 分享
发布于 2024-02-19 14:24 北京
网上好多胡扯的,挺不靠谱,我自己看源码,观点不一定对:TL里有个内部类ThreadLocalMap,Map里有个Entry数组,每个Thread都持有一个Map的引用,map持有entry数组的引用,Entry持有的是TL的弱引用,同时持有TL对应的value的引用。如果不是弱引用,相当于只要线程不消亡,TL始终被持有,从而不会被回收。如果是弱引用,就会存在这种情况:Entry还在,value还在,但是TL被回收了。TL被回收了实际上意味着value也不被需要了,因此会有expungeStaleEntry函数,将其value也赋成null,从而让value也能被回收。但这个函数是在某些操作后才会调用,且无法遍历整个entry数组,有些该被回收的value实际上有可能不会被清理,从而造成内存泄漏
1 回复 分享
发布于 2023-11-12 15:21 北京
现在的ThreadLocal应该只要你用完以后remove就不会泄露吧 ThreadLocalMap里的弱引用会在GC时回收的
1 回复 分享
发布于 2023-09-24 11:32 云南
弱引用只是一种优化机制,并没有解决内存泄漏,主要是防止外面的强引用在remove之前突然消失的一种优化机制,如果想彻底搞明白,我最新的文章,源码看过之后的理解
点赞 回复 分享
发布于 2024-04-16 01:21 江苏
mark
点赞 回复 分享
发布于 2023-09-26 08:47 美国

相关推荐

一面(5.30)45min自我介绍说说java中常用的集合linkedList 和 ArrayList的区别以及在什么时候会使用如果现在要自己实现一个hashmap,会怎么设计链表法和开放寻址有了解过吗?有哪些数据结构运用了开放寻址法说一下运行时数据区域里面有什么新实例化一个对象在堆上的一个分配流程是什么对gc的了解synchronized和juc包下面的工具类在日常开发中是怎么用的如何理解synchronized对性能有影响偏向锁是什么synchronized锁升级的流程threadlocal实现原理在开发中用到threadlocal中有没有什么坑为什么要在finally移除掉这个threadlocal强引用 弱引用 软引用 虚引用是什么concurrentHashMap的实现原理如何理解悲观锁和乐观锁,为什么认为乐观锁的性能会更好一次上下文切换大概要消耗多少性能,cpu空转又要消耗多少资源上下文切换的流程,上下文切换本质synchronized锁上了一个线程后,对于多核系统来说cpu资源可能会是什么状态spring的aop是基于什么实现的对cglib的了解,它是怎么去实现代理的在做项目的时候遇到特别有成就感的一件事在一个交易系统中,后端程序去调用微信支付接口,用户在使用微信支付时很久都没有支付,而后端程序并不知道支付成功还是支付失败,要怎么解决这种场景的发生为什么选择大二出来实习你以后是更希望成为一个更偏向业务的程序员还是更偏向技术的程序员校内的经历反问二面(6.5) 40min自我介绍讲一下mybatis拦截器的实现思路和应用场景数据隔离是怎么做的假如不限制时间不限制成本,实现数据隔离的方法threadLocal出现的bug怎么解决动态线程池是怎么设计的定时任务对动态线程池的作用假如说现在想要监控线程池的一些状态,你会想监控哪些属性讲一下双token机制探讨如何实现用户在token即将过期时无感的获取到新的token说一下对滑动窗口的理解想要实现随着时间变化的排行榜top100怎么实现问职业规划接不接受转go语言反问
点赞 评论 收藏
分享
05-28 14:23
门头沟学院 Java
民本大三 学到比较晚 基础也不好,做的两个烂大街项目 就开始在各大网站投实习,结果一个面试都没有,上周学校双选会,投了投,好不容易有一个面试机会,结果一问三不知,我已经感觉到面试官的无语了😶。面经:me:首先是自我介绍 。。。 (临时让ai生成的)h r:然后问我简历中的这两个项目 自认为比较好的地方me:我看了看 当时很紧张 脑子一边空白 只记得某马点评的 秒杀功能 的超卖问题(因为比较难 印象深,但是不会😂)h r:问我如何实现的 我说通过乐观锁解决(对就这几个字 没有多余的 因为我也说不上来了 太紧张了)h r:追问这个只通过乐观锁也不能解决啊(充满质疑的疑问)me:于是我又补充道 同时引入了Redisson分布式锁 (真的说不出来了 大脑一片空白,好在hr没有继续追问 可能知道我也说不清了)hr:又问 另一个**外卖项目比较满意那一部分me: 我是真的不知道哪里比较好 我记随便说了 redis缓存热点key1. redis 和 堆内存 存储的区别?这个问题一开始我以为适合mysql的区别,直接回答redis是存储到内存,hr立马打断说 堆内存也是内存,我就蒙了,没有印象,只能说不太了解😭2. 如果 两个用户的密码完全相同,此时用MD5加密算法后得到的密码相同吗,如何解决?首先说明相同,然后问我如何解决 我之前没有来了解过 加盐处理 只能说 在原来的处理上加入随机值。3. 外卖项目如何实现websocket的来单提醒?websocket更是没有了解过,只是做项目时 看了看 完全回答不上来4. 我看你项目中用到了websocket和redis 现在设计一个在线聊天系统 当用户登陆后 实时将登录用户展现在界面 如何实现?5. 如何使用mysql 语句 查询 两个用户是否相互关注?6. 点评项目 自定义拦截器如何实现的 ?这个问题刚好,之前整理过,不过回答完 hr不太理解实现了什么作用,并没有什么效果,我多次解释补充后,hr也是放弃了这个话题项目都是速成 很多都不熟悉,各位牛友可否解答一下面试官的问题 同时给点建议吗,真的很想找一份实习😭
查看11道真题和解析
点赞 评论 收藏
分享
评论
7
61
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务