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

Java中四种引用类型(强、软、弱、虚)

目录

引言

强引用(Strong References)

软引用(Soft References)

弱引用(Weak References)

虚引用(Phantom References)

引用类型的应用场景

总结


引言

        Java中的引用类型是管理对象生命周期和垃圾回收的重要概念。在Java中,对象的引用并不仅仅是指向对象的指针,它们还在垃圾回收机制中扮演着关键角色。Java中的引用类型主要包括强引用、软引用、弱引用和虚引用。让我们深入探讨这四种引用类型,了解它们的特性、用途和在内存管理中的作用。

强引用(Strong References)

        强引用是最常见的引用类型,也是默认的引用类型。当我们使用new关键字创建对象时,如果使用赋值语句将对象赋给一个变量,这个变量就持有该对象的强引用。只要强引用存在,垃圾回收器就不会回收该对象。

Object obj = new Object(); // 创建对象并持有强引用

        强引用使得对象在程序中可达,只有当所有强引用都消失时,对象才会成为垃圾,被垃圾回收器回收。

软引用(Soft References)

        软引用是一种相对于强引用弱化的引用类型。当内存不足时,垃圾回收器可能会回收软引用指向的对象来释放内存。这种引用类型适用于需要缓存的场景,允许在内存不足时释放缓存以避免OutOfMemoryError。

SoftReference<Object> softRef = new SoftReference<>(new Object()); // 创建软引用

        通过软引用获取对象时,需要检查引用是否为null。如果对象被回收,软引用将返回null。软引用通常用于缓存实现,比如Java中的高速缓存。

弱引用(Weak References)

        弱引用比软引用更弱化。垃圾回收器在进行垃圾回收时,不考虑弱引用指向的对象,即使内存足够,也会回收被弱引用指向的对象。

WeakReference<Object> weakRef = new WeakReference<>(new Object()); // 创建弱引用

        弱引用通常用于实现对对象的辅助引用,比如在WeakHashMap中使用弱引用作为键值。

虚引用(Phantom References)

        虚引用是所有引用类型中最弱的一种。它的存在几乎没有意义,因为无法通过虚引用获取对象。虚引用主要用于跟踪对象被垃圾回收的状态。

ReferenceQueue<Object> queue = new ReferenceQueue<>();
PhantomReference<Object> phantomRef = new PhantomReference<>(new Object(), queue); // 创建虚引用

        与其他引用类型不同,虚引用的构造函数需要与一个引用队列(ReferenceQueue)一起使用。当虚引用指向的对象被垃圾回收时,将会被放入引用队列中,通过引用队列可以得知对象已经被回收。

引用类型的应用场景

  • 缓存管理:软引用适合实现缓存,能在内存不足时释放缓存对象。
  • 内存敏感应用:对于内存敏感的应用,软引用和弱引用能够更灵活地管理对象生命周期。
  • 对象生命周期跟踪:虚引用可以用于跟踪对象是否已经被垃圾回收。

总结

        Java中的引用类型提供了不同级别的引用强度,影响对象的生命周期和垃圾回收。强引用是最常见的,只有在引用消失后对象才会被回收;软引用和弱引用对内存敏感,允许在内存不足时回收对象;虚引用则用于对象被回收时进行跟踪。合理使用这些引用类型能够更好地管理内存和对象生命周期,确保程序运行的稳定性和性能。

相关文章:

Java中四种引用类型(强、软、弱、虚)

目录 引言 强引用&#xff08;Strong References&#xff09; 软引用&#xff08;Soft References&#xff09; 弱引用&#xff08;Weak References&#xff09; 虚引用&#xff08;Phantom References&#xff09; 引用类型的应用场景 总结 引言 Java中的引用类型是管理…...

【MyBatis学习笔记】MyBatis基础学习

MyBatis基础 MyBatis简介MyBatis特性MyBatis下载和其他持久化层技术对比 核心配置文件详解默认的类型别名 搭建MyBatis开发环境创建maven工程创建MyBatis的核心配置文件创建mapper接口创建MyBatis的映射文件通过junit测试功能加入log4j日志功能 MyBatis获取参数值的两种方式&am…...

还在为论文焦虑?免费AI写作大师帮你搞定

先来看1分钟的视频&#xff0c;对于要写论文的你来说&#xff0c;绝对有所值&#xff01; 还在为写论文焦虑&#xff1f;免费AI写作大师来帮你三步搞定 第一步&#xff1a;输入关键信息 第二步&#xff1a;生成大纲 稍等片刻后&#xff0c;专业大纲生成&#xff08;由于举例&am…...

3.10【窗口】窗口使用示例(窗口缩放 三)

五,从窗口所有者放大 要从窗口的所有者本身进行放大,可以将源图像矩形设置得比窗口小。可以想象我们在一张图片中选取一部分进行放大的操作。 屏幕使用默认位置 (0,0) 作为源矩形、窗口和显示器显示的左上角。要放大源图形的特定区域,必须设置源矩形的大小。 源矩形由这些…...

【机器学习】密度聚类:从底层手写实现DBSCAN

【机器学习】Building-DBSCAN-from-Scratch 概念代码数据导入实现DBSCAN使用样例及其可视化 补充资料 概念 DBSCAN&#xff08;Density-Based Spatial Clustering of Applications with Noise&#xff0c;具有噪声的基于密度的聚类方法&#xff09;是一种基于密度的空间聚类算…...

2023-12-20 二叉搜索树的最近公共祖先和二叉搜索树中的插入操作和删除二叉搜索树中的节点

235. 二叉搜索树的最近公共祖先 思想&#xff1a;和二叉树的公共最近祖先节点的思路基本一致的&#xff01;就是不用从下往上遍历处理&#xff01;可以利用的二叉搜索树的特点从上往下处理了&#xff01;而且最近公共节点肯定是第一个出现在【q&#xff0c;p】这个区间的内的&…...

pytorch文本分类(三)模型框架(DNNtextCNN)

pytorch文本分类&#xff08;三&#xff09;模型框架&#xff08;DNN&textCNN&#xff09; 原任务链接 目录 pytorch文本分类&#xff08;三&#xff09;模型框架&#xff08;DNN&textCNN&#xff09;1. 背景知识深度学习 2. DNN2.1 从感知器到神经网络2.2 DNN的基本…...

<长篇文章!!>数据结构与算法的重要知识点与概要总结 ( •̀ ω •́ )✧✧临近考试和查漏补缺的小伙伴看这一篇就都懂啦~

目录 一、数据结构概论二、算法概论三、线性表四、栈五、队列六、串七、多维数组与矩阵八、广义表九、树与二叉树十、图 一、数据结构概论 1、数据元素和数据项 数据由数据元素组成&#xff0c;即数据元素是数据的基本单位&#xff0c;而数据元素又由若干个数据项组成&#xf…...

【安全】audispd调研

audispd调研 1 问题背景 在Linux中&#xff0c;当某个进程调用audit_set_pid将自己的pid保存到内核的audit模块后&#xff0c;如果有日志生成&#xff0c;kaudit内核线程就会通过netlink通信机制将审计日志发送给audit_pid&#xff0c;因此&#xff0c;只能有一个进程占用aud…...

WINDOWS(WIN11)通过IP添加网络打印机

点击添加设备 点击手动添加 使用IP地址或主机名添加打印机 选择TCP/IP设备&#xff0c;输入打印机地址 如果有正确驱动就安装&#xff0c;没有就取消。 通过手动设置添加本地打印机或网络打印机 使用现有的端口 根据打印机IP&#xff0c;选择标准端口。 成功&#xff01; 到…...

华为数通试题

选择题 华为数通推出的面向企业的云计算平台是&#xff1f; A) FusionSphere B) CloudEngine C) Agile Controller D) eSight 下面哪个不是华为数通的核心交换机系列&#xff1f; A) S12700 B) S5700 C) S9300 D) CloudEngine 华为数通的企业级路由器系列包括哪个&#xff1f…...

Labview Vision 机器视觉使用,从下载程序安装应用,到实战找硬币并输出值

1.前言 大家好,今天我要和机器人一起配合来打算 做机器视觉 用Labview 和 Vision 联动实现机器的视觉 2.下载软件-软件的安装 我们除了基础款的labview软件 还要安装视觉四件套 1.Labview 编程平台&#xff08;我是 2023 q3&#xff09; 2. NI - IMAQdx &#xff08;驱动软…...

【delphi11】delphi基础探索【三、基础组件和事件】

目录 基础组件 1. TButton&#xff08;按钮&#xff09; 2. TLabel&#xff08;标签&#xff09; 3. TEdit&#xff08;编辑框&#xff09; 4. TMemo&#xff08;多行编辑框&#xff09; 5. TComboBox&#xff08;组合框&#xff09; 6. TCheckBox&#xff08;复选框&…...

react hooks浅谈

一.useEffect useEffect是hooks中的生命周期函数 1.只要页面更新就触发回调&#xff1a; useEffect(() > { // 执行逻辑 }) 2.只运行一次&#xff08;组件挂载和卸载时执行&#xff09;&#xff0c;第二个参数传空数组[]&#xff1a; useEffect(() > { // },[]) 3. 条件…...

stable diffusion webui之lora调用

1.触发词底模lora效果最好&#xff08;分数不一定要取到1&#xff0c;0.8也行&#xff09;&#xff1b; 2.引用时一定要使用<lora:>&#xff0c;例如<lora:C4D_geometry_bg_v2.5:0.8>&#xff1b; "prompt": "(masterpiece:1.3), (best quality:1.…...

FormData文件上传多文件上传

一、简介 ​ 通常情况下&#xff0c;前端在使用post请求提交数据的时候&#xff0c;请求都是采用application/json 或 application/x-www-form-urlencoded编码类型&#xff0c;分别是借助JSON字符串来传递参数或者keyvalue格式字符串&#xff08;多参数通过&进行连接&#…...

八股文打卡day4——计算机网络(4)

TCP和UDP的概念、特点、区别和对应的使用场景&#xff1f; 我的回答&#xff1a; 概念&#xff1a; TCP是传输控制协议&#xff0c;是面向连接、可靠的、基于字节流的传输层通信协议。 UDP是用户数据报协议&#xff0c;是无连接、不可靠的&#xff0c;基于数据报的传输层通信…...

TensorFlow(2):Windows安装TensorFlow

1 安装python环境 这一步请自行安装&#xff0c;这边不做介绍。 2 安装anaconda 下载路径&#xff1a;Index of /&#xff0c;用户自行选择自己的需要的版本。 3 环境配置 3.1 anaconda环境配置 找到设置&#xff0c;点击系统->系统信息->高级系统设置->环境变量…...

一文解决idea导入源码控制台爆红问题

文章目录 唠嗑部分背景说明idea查看maven配置 言归正传安装mavenidea配置maven 结语及资料获取 唠嗑部分 背景说明 很多新手伙伴们在导入项目源码时&#xff0c;都会遇到大片依赖爆红&#xff0c;项目跑不起来&#xff0c;小白也是把自己电脑重新配置了一番&#xff0c;复现了…...

排序算法——快排

快速排序算法最早是由图灵奖获得者Tony Hoare设计出来的,他在形式化方法理论以 及ALGOL.60编程语言的发明中都有卓越的贡献,是20世纪最伟大的计算机科学家之—。 而这快速排序算法只是他众多贡献中的—个小发明而已。 快速排序&#xff08;Quick Sort&#xff09;的基本算法思…...

7个关键步骤:使用LMMS开源数字音频工作站完成专业音乐制作

7个关键步骤&#xff1a;使用LMMS开源数字音频工作站完成专业音乐制作 【免费下载链接】lmms Cross-platform music production software 项目地址: https://gitcode.com/gh_mirrors/lm/lmms LMMS&#xff08;Linux MultiMedia Studio&#xff09;是一款跨平台的开源数字…...

Ollama部署Qwen2.5-VL-7B实战:图片识别与描述生成

Ollama部署Qwen2.5-VL-7B实战&#xff1a;图片识别与描述生成 1. 引言&#xff1a;认识Qwen2.5-VL多模态模型 Qwen2.5-VL是阿里云推出的开源多模态大模型系列的最新成员&#xff0c;作为Qwen2-VL的升级版本&#xff0c;它在视觉理解和语言交互方面实现了显著提升。本次我们将…...

终极指南:用Kronos金融大模型5步构建你的量化交易系统

终极指南&#xff1a;用Kronos金融大模型5步构建你的量化交易系统 【免费下载链接】Kronos Kronos: A Foundation Model for the Language of Financial Markets 项目地址: https://gitcode.com/GitHub_Trending/kronos14/Kronos Kronos是首个专为金融市场设计的开源基础…...

OpenRocket完全指南:如何免费设计并仿真你的第一枚模型火箭[特殊字符]

OpenRocket完全指南&#xff1a;如何免费设计并仿真你的第一枚模型火箭&#x1f680; 【免费下载链接】openrocket Model-rocketry aerodynamics and trajectory simulation software 项目地址: https://gitcode.com/GitHub_Trending/op/openrocket 你是否曾经梦想设计自…...

数据救援3大维度全解析:开源工具TestDisk PhotoRec实战指南

数据救援3大维度全解析&#xff1a;开源工具TestDisk & PhotoRec实战指南 【免费下载链接】testdisk TestDisk & PhotoRec 项目地址: https://gitcode.com/gh_mirrors/te/testdisk 硬盘数据恢复是每个技术人员都可能面临的挑战&#xff0c;当遭遇分区损坏、文件…...

用Multisim/TINA-TI仿真带你玩转一阶到二阶有源滤波器:从传递函数到实际频响曲线全验证

从仿真到实践&#xff1a;一阶与二阶有源滤波器的可视化验证指南 在模拟电路设计中&#xff0c;滤波器是信号处理的基础模块。许多初学者虽然能推导传递函数&#xff0c;却难以将理论公式与实际电路行为建立直观联系。本文将用Multisim和TINA-TI两款主流仿真工具&#xff0c;带…...

OpenClaw技能市场巡礼:百川2-13B支持的十大实用插件

OpenClaw技能市场巡礼&#xff1a;百川2-13B支持的十大实用插件 1. 为什么需要技能市场&#xff1f; 第一次接触OpenClaw时&#xff0c;我被它"本地化AI助手"的定位吸引&#xff0c;但很快发现原生功能有限——它能操控鼠标键盘、读写文件&#xff0c;但具体到&quo…...

告别盲目构筑烦恼:Path of Building带来的流放之路角色优化变革

告别盲目构筑烦恼&#xff1a;Path of Building带来的流放之路角色优化变革 【免费下载链接】PathOfBuilding Offline build planner for Path of Exile. 项目地址: https://gitcode.com/gh_mirrors/pat/PathOfBuilding 在《流放之路》的世界里&#xff0c;每一个角色构…...

VRRP配置里这个‘坑’你踩过吗?详解track监视上行链路与流量黑洞问题

VRRP高可用架构中的隐形陷阱&#xff1a;深度解析上行链路监控与流量黑洞解决方案 当企业核心网络的网关设备突然"失联"&#xff0c;但设备状态灯却依然闪烁着健康的绿色&#xff0c;这种看似矛盾的故障场景往往让运维团队陷入困境。上周深夜&#xff0c;某金融公司就…...

Windows Defender Remover:系统性能优化与防护机制管理指南

Windows Defender Remover&#xff1a;系统性能优化与防护机制管理指南 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh_mirror…...