【JVM基础14】——垃圾回收-强引用、软引用、弱引用、虚引用的区别

news2025/4/28 12:20:14

目录

  • 1- 引言:为什么分多种引用类型
  • 2- ⭐核心:
    • 2-1 强引用
    • 2-2 软引用
    • 2-3 弱引用
    • 2-4 虚引用
  • 3- 小结:
    • 3-1 强引用、软引用、弱引用、虚引用的区别?


1- 引言:为什么分多种引用类型

  • 在 Java 中,引用类型被分为强引用、软引用、弱引用和虚引用,主要是为了更好地管理内存,尤其是垃圾回收(Garbage Collection,GC)。

2- ⭐核心:

2-1 强引用

  • 强引用:只有所有 GC Roots 对象都不通过 【强引用】引用该对象,该对象才能被垃圾回收。
  • 例如以下的 User 对象,即使 是出现了 OOM 内存不足,也不会被垃圾回收,因为其作为 GC Root 的强引用。

image.png

2-2 软引用

  • 软引用:仅有软引用引用该对象时,在第一次垃圾回收时,并不会直接回收软引用对象,如果内存仍不足时会再次触发垃圾回收,回收软引用对象。

image.png


2-3 弱引用

  • 弱引用:仅有弱引用引用该对象时,在垃圾回收时,无论内存是否充足,都会回收弱引用对象。
  • 例如 ThreadLocal 内存泄漏的问题,ThreadLocalMap 中的 ThreadLocal 作为键是弱引用,会导致内存泄漏。

image.png


2-4 虚引用

  • 虚引用:必须配合引用队列使用,被引用对象回收时,会将虚引用入队,由 Reference Handler 线程调用虚引用相关方法释放直接内存
  • 虚引用在回收的时的工作流程,在垃圾回收的过程中,比如 User1 和 User2 被垃圾回收了,之后虚引用对象会被放入到引用队列中,以释放虚引用对象所引用的一些外部资源。
  • 软引用和弱引用也可以通过引用队列去释放资源。

image.png


3- 小结:

3-1 强引用、软引用、弱引用、虚引用的区别?

在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1987460.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ICM-20948芯片详解(8)

接前一篇文章:ICM-20948芯片详解(7) 六、寄存器详解 1. 总述 ICM-20948共有user bank 0~3共4组寄存器。 USER BANK 0寄存器图 USER BANK 0所包含的寄存器如下图所示: USER BANK 1寄存器图 USER BANK 1所包含的寄存器如下图所…

校园外卖微信小程序的设计与实现

校园外卖微信小程序的设计与实现 校园外卖微信小程序的设计与实现 [摘要] 随着社会的进步和生活质量的提高,人们对用餐体验有了更高的要求,导致电话和网上订餐服务日益发展。这一趋势也推动了以大学生为主要服务对象的校园外卖的发展。此次设计主要为大…

AI大模型巡游记第二回探索幻梦

unsetunset第二回:探索幻梦unsetunset **随着夕阳西下,李逸结束了今天的探险之旅…… 李逸回到了现实世界,心中满是对“幻境大模型”体验的好奇与惊叹。他迫不及待地想要了解更多关于这项技术背后的秘密。于是,他决定访问“幻梦”…

Python写UI自动化--playwright(元素焦点的控制)

在UI测试中会遇到一种情况,在输入框输入内容,鼠标焦点离开输入框后,前端会对输入框内容进行判断是否合法,比如输入不正确格式的账号,会有相应的提示。该篇文章就讲一讲playwright关于元素焦点的控制: Play…

Makefile基础语法 看这一篇就够了

Makefile 基础语法 Makefile 是一种用于自动化构建过程的脚本文件,它通过定义目标文件和依赖关系来告诉 make 工具如何构建项目。Makefile 的语法和结构可以非常灵活,适用于各种复杂的构建场景。本教程将详细介绍 Makefile 的基本概念、语法以及如何编写…

python3 pyside6图形库学习笔记及实践(五)

目录 前言选项卡(QTabWidget)创建选项卡常用属性和方法常用信号 堆叠页面(QStackedWidget)创建堆叠容器切换页面过渡动画 前言 本系列文章为b站PySide6教程以及官方文档的学习笔记 原视频传送门:【已完结】PySide6百炼成真,带你系统性入门Qt 官方文档…

Linux云计算 |【第二阶段】CLUSTER-DAY3

主要内容: Ceph概述、部署Ceph集群、Ceph块存储 一、分布式存储基础 分布式系统(Distributed File System)是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。文件系统管理的物理存储资源不一定直接连接在本…

ClickHouse:单机安装

目录 一、ClickHouse介绍 二、安装ClickHouse 2.1安装要求 2.2单机安装 2.3修改配置文件(可选) 2.4升级软件 三、使用ClickHouse 3.1连接ClickHouse 3.2 执行SQL 一、ClickHouse介绍 ClickHouse是由Yandex开源的一个高性能、面向列的SQL数据库管理系统(DBM…

【踩坑】pytorch中的索引与copy_结合不会复制数据及其解决方案

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 目录 背景知识 实验验证 结论分析 错误案例 处理方法 注意事项 附加说明 基本索引返回视图 高级索引返回副本 赋值操作都是原地操作 以下内容…

SS9283403 sqlite3交叉编译并部署到SS928(六)

1.Sqlite3下载 连接:SQLite Download Page 2.解压 tar zxvf sqlite-autoconf-3460000.tar.gz 3.配置并编译 进入解压目录,打开命令行,输入如下命令 ./configure CCaarch64-mix210-linux-gcc --hostarm-linux --prefix/home/mc/work/sqlite…

002发那科ROBOGUIDE仿真导入模型

打开已经创建好的工程,找到“机器” 右键,添加机器->CAD文件(F) 找到本地的3D模型,然后点击,打开 设置模型位置[0,0,0,0,0,0] 然后就导入进来啦

对比速览 | Alluxio 企业版 v.s. 社区版

当前诸多企业面临着日益增长的数据量和复杂的数据管理挑战。特别是在模型训练的过程中,诸如GPU短缺、GPU利用率不高等问题已经成为许多企业在技术实施中面临的挑战。同时,大数据分析中跨云数据访问速度慢、成本高等问题也给企业带来了痛点。为了应对这些…

redolog和binlog的两阶段提交和区别

redolog和binlog区别 redo log 是 InnoDB 引擎特有的;binlog 是 MySQL 的 Server 层实现的,所有引擎都可以使用。redo log 是物理日志,记录的是“在某个数据页上做了什么修改”;binlog 是逻辑日志,记录的是这个语句的…

Shell编程 --函数语法与重定向

文章目录 Shell编程shell函数语法函数参数 Shell 输入/输出重定向输出重定向输入重定向重定向深入讲解/dev/null 文件 总结 Shell编程 Shell是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令&…

Postman入门:环境变量和全局变量

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、发送请求 二、设置并引用环境变量 比如:我建的这个生产环境 使用环境有两个方式,一个是点击每个环境后面的对勾;另一种方式…

【Linux操作系统】进程的基本概念(PCB对象)详解

目录 一、进程的基本概念二、进程的描述组织(PCB对象)1.PCB的基本概念2.为什么要有PCB对象(操作系统对进程的组织管理)3.PCB对象的内部属性(tast_struct结构体) 三、查看进程1.ps指令2.top指令3.通过 /proc…

【LeetCode 1991 找到数组的中间位置 / LeetCode 724 寻找数组的中心下标】中间索引问题

1991 题目描述 暴力解法1: 思路: 遍历下标,求出左边和和右边和比较两边是否相等相等直接返回值没有符合的返回 -1 class Solution {public int findMiddleIndex(int[] nums) {int lennums.length;//初始化一个变量 midIndex 为 -1&#xff…

前端性能优化-script标签中的async与defer

前言 当浏览器解析 DOM 时候&#xff0c;遇到 script 标签时&#xff0c;会暂停 DOM 的解析&#xff0c;先加载并执行 script 中的代码&#xff0c;然后再继续 DOM 的解析。 比如 <script>window.env {version: "production",}; </script>上面的代码…

KVM——虚拟机添加设备与挂载磁盘

目录 一. 图形化方式添加设备 1. 添加磁盘 2. 添加网卡 二. 命令行形式添加设备 方式一&#xff1a; 方式二&#xff1a; 磁盘格式raw和qcow2 raw格式 qcow2格式 如何选择 挂载磁盘 一. 图形化方式添加设备 1. 添加磁盘 2. 添加网卡 先关机 给宿主机添加一块网…

华南理工大学-大学物理实验 迈克尔逊干涉仪

迈克尔逊干涉仪的调整与使用 引言 迈克尔逊( Albert Abrham Michelson, 1852-1931) , 著名的实验物理学家,近现代干涉仪的开山鼻祖。他设计了至今仍在广泛应用的迈克尔逊干涉仪。该仪器设计非常巧妙,测量极其精密,是近代许多干涉仪的基础。迈克尔逊当时设计该仪器的目的之…