ThreadLocal有内存泄漏问题吗

这篇具有很好参考价值的文章主要介绍了ThreadLocal有内存泄漏问题吗。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

对于ThreadLocal的原理不了解或者连Java中的引用类型都不了解的可以看一下我的之前的一篇文章Java中的引用和ThreadLocal_鱼跃鹰飞的博客-CSDN博客

我这里也简单总结一下:

1. 每个Thread里都存储着一个成员变量,ThreadLocalMap

2. ThreadLocal本身不存储数据,像是一个工具类,基于ThreadLocal去操作ThreadLocalMap

3.ThreadLocalMap本身就是基于Entry[]实现的,因为一个线程可以绑定多个ThreadLocal,这样一来,可能需要存储多个数据,所以采用Entry[]的形式实现

4.每一个线程都有自己的ThreadLocalMap,再基于ThreadLocal对象本身作为key,对value进行存取.

5.ThreadLocalMap的key是一个弱引用,弱引用的特点是:GC回收时,一定会被回收。这里使用弱引用是为了在ThreadLocal对象失去引用之后能被回收,如果是强引用,会导致ThreadLocal对象无法被回收

关于ThreadLocal的内存泄漏问题我们可以通过两个方面进行讨论

我们先看一下ThreadLocal的原理图

ThreadLocal有内存泄漏问题吗,高频面试题,大厂真题,架构师,jvm,java,开发语言

 

1. key的内存泄漏

key的是ThreadLocal对象,因为是弱引用,GC的时候就可以被回收掉,所以key的内存泄漏问题通过弱引用的设计就解决了。

2. value的内存泄漏问题

这是我们实际工作中可能面临的问题,如果ThreadLocal对象因为GC被回收了,也就是对应的key失去了引用,变成了null,那value也就无法访问了,如果我们使用的是new出来的线程,等线程执行结束了也就会被整体回收掉了,但是如果使用的是线程池那线程的空间就不会被回收,所以需要自己在使用完ThreadLocal对象后及时调用remove方法,移除Entry即可。这个是面试中关于ThreadLocal的主要考点文章来源地址https://www.toymoban.com/news/detail-623329.html

到了这里,关于ThreadLocal有内存泄漏问题吗的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ThreadLocal引发的内存泄漏分析

    Object o = new Object(); 这个o,我们可以称之为对象引用,而new Object()我们可以称之为在内存中产生了一个对象实例。 当写下  o=null 时,只是表示o不再指向堆中object的对象实例,不代表这个对象实例不存在了。 强引用:  就是指在程序代码之中普遍存在的,类似“Object obj=new Ob

    2024年02月09日
    浏览(45)
  • ThreadLocal-为什么会导致内存泄漏

    一个Thread中存在字段为ThreadLocalMap ThreadLocal.ThreadLocalMap threadLocals = null; 也就是说我们使用threadLocal进行set操作和get操作,其实就是操作该Thread的threadLocalMap。 这个map是一个基于数组的key和value的格式,在进行get的时候,会将调用对象this作为key进行查询。 hashMap是通过链表法,

    2024年02月03日
    浏览(47)
  • 互联网大厂技术-Redis-集群模型、架构原理、难点应用场景、高频面试问题详解

    目录 一、Redis集群模型 1.1、主从模式 1.1.1 主从模式优缺点 1.2、哨兵模式 1.2.1 哨兵模式的作用: 1.2.2 哨兵实现原理 1.2.3 主观下线和客观下线 1.2.4 哨兵模式优缺点 1.3、各大厂的Redis集群方案 1.3.1 客户端分片 1.3.2 代理分片 Twemproxy的优点: Twemproxy的不足: 1.3.3 Codis 1.4、Redis

    2024年02月16日
    浏览(68)
  • 大厂面试题一文讲通jvm,Java虚拟机高频面试题

    薪资范围:6-16K 一个类完整的生命周期,会经历五个阶段,分别为: 加载、连接、初始化、使用 、和 卸载 。其中的连接又分为 验证、准备 和 解析 三个步骤。如下图所示 加载(Loading) 简单一句话概括,类的加载阶段就是: 找到需要加载的类并把类的信息加载到jvm的方法

    2024年01月18日
    浏览(33)
  • 华为OD高频面试真题

     华为OD机试真题目录:真题目录 题目保证都是考过的真题,目前是六个,后四题都是华为od祖传的题目,很经常出 考前练练很有帮助,也可以看下大概难度 两个专栏都有,要是不需要机试题可以购买第二个专栏 一、面试面试官发题大多是在腾讯会议的聊天中以文字的形式发

    2024年02月07日
    浏览(39)
  • 大厂整理的23年前端工程师面试手册,高频面试题终结篇,github上标星16k!

    前端开发所需掌握知识点概要: HTMLCSS:浏览器内核、渲染原理、依赖管理、兼容性、CSS语法、层次关系,常用属性、布局、选择器、权重、CSS盒模型、Hack、CSS预处理器、CSS3动画 JavaScript: 数据类型、运算、对象、Function、继承、闭包、作用域、事件、Prototype、RegExp、JSON、

    2024年02月03日
    浏览(25)
  • 2023金三银四1000道java面试必考题(附答案,赶紧收藏)包含所有大厂高频面试知识点

    我的回答是: 很有必要 。你可以讨厌这种模式,但你一定要去背,因为不背你就进不了大厂。现如今,Java 面试的本质就是八股文,把八股文面试题背好,面试才有可能表现好。金九银十招聘黄金季即将来临!大家在考研和找工作中纠结的时候,不妨先看一下面试题,毕竟我

    2023年04月09日
    浏览(43)
  • 【精选】护网面试题4.0 (大厂真题)

    目录 1.设备误报如何处理? 2.如何区分扫描流量和手工流量? 3.网站被上传webshell如何处理? 4.给你一个比较大的日志,应该如何分析? 5.了解安全设备嘛? 6.了解过系统加固吗? 7.CS是什么东西,知道怎么使用吗? 8.WAF方面有没有了解过,清楚WAF的分类和原理吗? 9.Powershe

    2024年01月17日
    浏览(27)
  • 一线大厂面试真题-Kafka如何保证消息不丢失

    目录 问题解答 面试点评 (如图) kafka 是 一个用来实现异步消息通信的中间件,它的整个架构由Producer、 Consumer 、 Broker组成。 所以,对于 kafka 如 何保证消息不丢失这个问题,可以从三个方面来考虑和实现 : 首先 是Producer端,需要确保消息能够到达Broker并实现消息存储,在这

    2024年02月01日
    浏览(43)
  • 2023Java岗面试,进互联网大厂必备Java面试八股文真题解析

    前言 一般技术面试官都会通过自己的方式去考察程序员的技术功底与基础理论知识。 很多时候,面试官问的问题会和自己准备的“题库”中的问题不太一样,即使做了复盘,下次面试还是不知道该从何处下手。 为此鄙人软磨硬泡才把阿里P8专门归纳整理的 《Java进阶知识典藏

    2023年04月10日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包