当前位置: 首页 > news >正文

【JVM篇】ThreadLocal中为什么要使用弱引用

文章目录

  • 🍔ThreadLocal中为什么要使用弱引用
  • ⭐总结

在这里插入图片描述

🍔ThreadLocal中为什么要使用弱引用

ThreadLocal可以在线程中存放线程的本地变量,保证数据的线程安全
在这里插入图片描述
ThreadLocal是这样子保存对象的:

  1. 在每个线程中,存放了一个ThreadLocalMap对象,本质上就是一个数组实现的哈希表,里面存放多个Entry对象
  2. 每个Entry对象继承自弱引用,内部存放ThreadLocal对象,同时用强引用,引用保存的ThreadLocal对应的value值
    在这里插入图片描述
    下面我们以代码为例

在这里插入图片描述
下面我们可以使用get方法,看看刚才保存的value值能不能获取到
在这里插入图片描述


当我们不使用ThreadLocal对象的时候,threadlocal=null;由于是弱引用,那么在垃圾回收后,ThreadLocal对象可以被回收

在这里插入图片描述
这就体现了弱引用的好处:
在垃圾回收的过程中,假设这个东西只有弱引用关联,那么这个对象是可以被回收的,所以尽管它还在被线程的ThreadLocalMap引用着,它依然可以正常的回收掉。
相反的,如果我们没有使用弱引用,使用了强引用,在我们允许完这段代码后,这个threadlocal仍然不能被回收,这样就造成了内存泄漏问题

但是现在,这个Entry对象和value对象能不能被回收呢?显然是不行的。 因为我们通过ThreadLocal的数组,还是有一个强引用关联到了Entry对象和value值,那么我们可以这么去除掉这一部分数据呢?
在ThreadLocal不再使用的时候,调用remove方法将Entry对象的引用关系去掉,这样子就可以回收掉这2个对象了
在这里插入图片描述

⭐总结

在这里插入图片描述

在技术的道路上,我们不断探索、不断前行,不断面对挑战、不断突破自我。科技的发展改变着世界,而我们作为技术人员,也在这个过程中书写着自己的篇章。让我们携手并进,共同努力,开创美好的未来!愿我们在科技的征途上不断奋进,创造出更加美好、更加智能的明天!

在这里插入图片描述

相关文章:

【JVM篇】ThreadLocal中为什么要使用弱引用

文章目录 🍔ThreadLocal中为什么要使用弱引用⭐总结 🍔ThreadLocal中为什么要使用弱引用 ThreadLocal可以在线程中存放线程的本地变量,保证数据的线程安全 ThreadLocal是这样子保存对象的: 在每个线程中,存放了一个…...

Stable Diffusion教程——stable diffusion基础原理详解与安装秋叶整合包进行出图测试

前言 在2022年,人工智能创作内容(AIGC)成为了AI领域的热门话题之一。在ChatGPT问世之前,AI绘画以其独特的创意和便捷的创作工具迅速走红,引起了广泛关注。随着一系列以Stable Diffusion、Midjourney、NovelAI等为代表…...

【JavaEE】_线程与多线程的创建

目录 1. 线程的概念 2. 创建与使用多线程 2.1 方式1:继承Thread类 2.2 方式2: 实现Runnable接口 2.3 以上两种创建线程方式的对比 3. 多线程的优势-增加运行速度 1. 线程的概念 进程的存在是由于系统的多任务执行需求,这也要求程序员进…...

【前端工程化面试题】如何优化提高 webpack 的构建速度

使用最新版本的 Webpack 和相关插件: 每个新版本的 Webpack 都会带来性能方面的改进和优化,因此始终确保你在使用最新版本。同时,更新你的相关插件也是同样重要的。 使用DllPlugin动态链接库: 使用DllPlugin和DllReferencePlugin来将第三方库的代码进行…...

免费chatgpt使用

基本功能如下: https://go.aigcplus.cc/auth/register?inviteCode3HCULH2UD...

OpenCV识别人脸案例实战

使用级联函数 基本流程 函数介绍 在OpenCV中,人脸检测使用的是cv2.CascadeClassifier.detectMultiScale()函数,它可以检测出图片中所有的人脸。该函数由分类器对象调用,其语法格式为: objects cv2.CascadeClassifier.detectMul…...

VOSK——离线语音库

文章目录 识别函数调用添加自定义热词表1. SetWords2. SetLatticeWords3. SetPartialWords使用示例注意1. SetMaxAlternatives2. SetNLSML3. SetSpkModel4. SetGrammar使用示例注意SetLogLevel示例用法注意事项 识别函数调用 在使用Vosk库进行语音识别时,PartialRe…...

ELAdmin 隐藏添加编辑按钮

使用场景 做了一个监控模块,数据都是定时生成的,所以不需要手动添加和编辑功能。 顶部不显示 可以使用 true 或者 false 控制现实隐藏 created() {this.crud.optShow {add: false,edit: false,del: true,download: true,reset: true}},如果没有 crea…...

浅谈Websocket

由于 http 存在⼀个明显的弊端(消息只能有客户端推送到服务器端,⽽服务器端不能主动推送到客户端),导致如果服务器如果有连续的变化,这时只能使⽤轮询,⽽轮询效率过低,并不适合。于是 WebSocket 被发明出来 WebSocket 是⼀种在 Web 应⽤程序中实现双向通信的协议。与传…...

JavaScript闭包详细介绍

文章目录 什么是闭包优点:变量持久化:封装私有变量:模块化:函数工厂: 缺点:内存占用:调试困难:过度使用导致性能下降: 什么是闭包 闭包是指有权访问另一个函数作用域中的…...

pytorch神经网络入门代码

import torch import torch.nn as nn import torch.optim as optim import torchvision import torchvision.transforms as transforms# 定义神经网络结构 class SimpleNN(nn.Module):def __init__(self, input_size, hidden_size, num_classes):super(SimpleNN, self).__init_…...

代码随想录算法训练营第三十四天|860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球

860.柠檬水找零 链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 细节: 1. 首先根据题意就是只有5.的成本,然后就开始找钱,找钱也是10.和5. 2. 直接根据10 和 5 进行变量定义,然后去循环…...

Ditto:提升剪贴板体验的宝藏软件(复制粘贴效率翻倍、文本处理好助手)

名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、什么是Ditto?二、下载安装三、如…...

【自然语言处理-工具篇】spaCy<2>--模型的使用

前言 之前已经介绍了spaCy的安装,接下来我们要通过下载和加载模型去开始使用spaCy。 下载模型 经过训练的 spaCy 管道可以作为 Python 包安装。这意味着它们是应用程序的一个组件,就像任何其他模块一样。可以使用 spaCy download的命令安装模型,也可以通过将 pip 指向路径或…...

Java之通过Jsch库连接Linux实现文件传输

Java之通过JSch库连接Linux实现文件传输 文章目录 Java之通过JSch库连接Linux实现文件传输1. JSch2. Java通过Jsch连接Linux1. poxm.xml2. 工具类3. 调用案例 1. JSch 官网:JSch - Java Secure Channel (jcraft.com) JSch是SSH2的纯Java实现。 JSch 允许您连接到 ss…...

Nginx七层负载均衡之动静分离

思路: servera:负载均衡服务器 serverb:静态服务器 serverc:动态服务器 serverd:默认服务器 servera(192.168.233.132): # 安装 Nginx 服务器 yum install nginx -y#关闭防火墙和selinux systemctl stop firewalld setenforce 0# 切换到 Nginx 配置文…...

305_C++_定义了一个定时器池 TimerPool 类和相关的枚举类型和结构体

头文件:定义了一个定时器池 TimerPool 类和相关的枚举类型和结构体 #ifndef TIMERPOOL_H #define TIMERPOOL_H #include "rsglobal.h" #include "taskqueue.h" #incl...

大整数因数分解工具——yafu

一、安装 yafu--下载链接 二、配置环境变量,直接从cmd打开 1.找到yafu-x64.exe 所在的文件路径 2.点击设置——系统——系统信息——高级系统设置——环境变量——点击PATH(上下都可以)——新建 添加yafu-x64.exe 所在路径——点击确定 3…...

非关系型数据库(NOSQL)和关系型数据库(SQL)区别详解

前言: 在我们的日常开发中,关系型数据库和非关系型数据库的使用已经是一个成熟的软件产品开发过程中必不可却的存储数据的工具了。那么用了这么久的关系数据库和非关系型数据库你们都知道他们之间的区别了吗?下面我们来详细的介绍一下。 关系…...

7.Cloud-GateWay

0.概述 https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/ 1.入门配置 1.1 POM <!--新增gateway--> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-sta…...

解决Claude Code频繁封号与Token不足问题转向Taotoken

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 解决Claude Code频繁封号与Token不足问题转向Taotoken 对于依赖Claude Code作为日常编程助手的开发者而言&#xff0c;服务中断是影…...

TDengine数据迁移与备份实战:使用taosdump将2.x数据安全升级到3.0

TDengine 2.x到3.0数据迁移完全指南&#xff1a;从备份策略到避坑实践 时序数据库的版本升级往往伴随着数据迁移的挑战。当企业决定将TDengine从2.x升级到3.0时&#xff0c;如何确保数据安全迁移成为技术团队面临的首要问题。本文将深入解析使用taosdump工具进行数据迁移的全流…...

免费模组管理器终极指南:快速配置BG3ModManager提升游戏体验

免费模组管理器终极指南&#xff1a;快速配置BG3ModManager提升游戏体验 【免费下载链接】BG3ModManager A mod manager for Baldurs Gate 3. This is the only official source! 项目地址: https://gitcode.com/gh_mirrors/bg/BG3ModManager BG3ModManager是一款专为《…...

Python金融预测实战:CNN-BiLSTM模型在沪深300指数预测中的调参与对比分析

1. 为什么选择CNN-BiLSTM预测沪深300指数&#xff1f; 在金融时间序列预测领域&#xff0c;传统统计方法&#xff08;如ARIMA&#xff09;往往难以捕捉市场中的非线性关系。我最初尝试用单一LSTM模型预测沪深300指数收盘价时&#xff0c;发现两个明显问题&#xff1a;一是对价格…...

从零开始用vnpy搭建你的第一个量化交易机器人(保姆级Python教程)

从零开始用vnpy搭建你的第一个量化交易机器人&#xff08;保姆级Python教程&#xff09; 第一次接触量化交易时&#xff0c;我被那些复杂的术语和代码吓得不轻。直到发现vnpy这个Python框架&#xff0c;才真正找到了入门的方向。vnpy就像是为Python开发者量身定制的量化交易工具…...

探索ONVIF世界:轻松对接RTSP视频流的开源宝藏

探索ONVIF世界&#xff1a;轻松对接RTSP视频流的开源宝藏 【下载地址】ONVIF协议RTSP视频流与OnvifDeviceManager对接实现 本资源文件提供了一个成功实现ONVIF协议RTSP视频流与OnvifDeviceManager对接的代码示例。该示例对于希望实现ONVIF视频对接的开发者具有一定的参考价值 …...

Awoo Installer:任天堂Switch游戏安装的终极解决方案,3种方式快速搞定NSP/NSZ/XCI/XCZ文件

Awoo Installer&#xff1a;任天堂Switch游戏安装的终极解决方案&#xff0c;3种方式快速搞定NSP/NSZ/XCI/XCZ文件 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-…...

Hi3861点灯程序背后的构建系统:手把手教你修改BUILD.gn文件,定制你的第一个鸿蒙应用

Hi3861开发实战&#xff1a;深入鸿蒙构建系统与GN脚本定制指南 当LED灯在Hi3861开发板上第一次亮起时&#xff0c;很多开发者会认为这只是一个简单的GPIO控制实验。但鲜为人知的是&#xff0c;这个看似简单的"点灯"动作背后&#xff0c;隐藏着鸿蒙轻量设备开发中最核…...

Sun-to-Spotify 技术架构深度剖析:AI 播客生成、CLI 交互与 Spotify 自动化发布全链路实现

摘要 Sun-to-Spotify 是一款基于 Claude Code Skill 生态构建的开源 AI 音频工程工具&#xff0c;核心实现自然语言指令→智能内容生成→多角色对话脚本创作→TTS 音频合成→混音处理→Spotify 平台自动发布的全流程自动化闭环。项目深度整合命令行工具&#xff08;sun-cli&am…...

手把手教你用STM32F103驱动TLC7528双路DAC(附完整代码与避坑指南)

手把手教你用STM32F103驱动TLC7528双路DAC&#xff08;附完整代码与避坑指南&#xff09; 在嵌入式开发中&#xff0c;数字模拟转换器&#xff08;DAC&#xff09;是实现数字信号到模拟信号转换的关键组件。TLC7528作为一款经典的双路8位DAC芯片&#xff0c;以其高性价比和简单…...