JVM-Java的四种引用
引用分析
无论是通过引用计数算法判断对象的引用数量,还是通过可达性分析算法判断对象是否可达,判定对象是否可被回收都与引用有关,Java 提供了四种强度不同的引用类型
强引用:
被强引用关联的对象不会被回收,只有所有 GCRoots 都不通过强引用引用该对象,才能被垃圾回收
强引用可以直接访问目标对象
虚拟机宁愿抛出 OOM 异常,也不会回收强引用所指向对象
强引用可能导致内存泄漏
Object obj = new Object();//使用 new 一个新对象的方式来创建强引用
软引用(SoftReference):
被软引用关联的对象只有在内存不够的情况下才会被回收
Object obj = new Object();
SoftReference<Object> sf = new SoftReference<Object>(obj);
obj = null; // 使对象只被软引用关联
仅(可能有强引用,一个对象可以被多个引用)有软引用引用该对象时,在垃圾回收后,内存仍不足时会再次出发垃圾回收,回收软引用对象
配合引用队列来释放软引用自身,在构造软引用时,可以指定一个引用队列,当软引用对象被回收时,就会加入指定的引用队列,通过这个队列可以跟踪对象的回收情况
软引用通常用来实现内存敏感的缓存,比如高速缓存就有用到软引用;如果还有空闲内存,就可以暂时保留缓存,当内存不足时清理掉,这样就保证了使用缓存的同时不会耗尽内存
弱引用(WeakReference):
被弱引用关联的对象一定会被回收,只能存活到下一次垃圾回收发生之前,即发生垃圾回收时一定会回收弱引用
Object obj = new Object();
WeakReference<Object> wf = new WeakReference<Object>(obj);
obj = null;
仅有弱引用引用该对象时,在垃圾回收时,无论内存是否充足,都会回收弱引用对象
配合引用队列来释放弱引用自身
WeakHashMap 用来存储图片信息,可以在内存不足的时候及时回收,避免了 OOM
虚引用(PhantomReference):
也称为幽灵引用或者幻影引用,是所有引用类型中最弱的一个,引入虚引用主要是为了释放直接内存
Object obj = new Object();
PhantomReference<Object> pf = new PhantomReference<Object>(obj, null);
obj = null;
一个对象是否有虚引用的存在,不会对其生存时间造成影响,也无法通过虚引用得到一个对象
为对象设置虚引用的唯一目的是在于跟踪垃圾回收过程,能在这个对象被回收时收到一个系统通知
必须配合引用队列使用,主要配合 ByteBuffer 使用,被引用对象回收时会将虚引用入队,由 Reference Handler 线程调用虚引用相关方法释放直接内存
相关文章:
JVM-Java的四种引用
引用分析 无论是通过引用计数算法判断对象的引用数量,还是通过可达性分析算法判断对象是否可达,判定对象是否可被回收都与引用有关,Java 提供了四种强度不同的引用类型 强引用: 被强引用关联的对象不会被回收,只有所…...
探索《黑神话:悟空》品质保障的背后:ISO体系认证
《黑神话:悟空》横空出世 8月20日上午10点,国产首款大型3A游戏《黑神话:悟空》正式上线。游戏一经上线便吸引了无数国内外用户的关注,不仅仅是因为其高超的游戏制作技术,极高的画面精度,精良的的视觉和战斗…...
ArcGIS Pro 实现人口分布栅格TIFF数据的网格提取与可视化
这里在分享一个人口1km精度栅格数据,LandScan是由美国能源部橡树岭国家实验室(ORNL)提供的全球人口分布数据集,具有最高分辨率的全球人口分布数据,是全球人口数据发布的社会标准,是全球最为准确、可靠&…...
select的缺点;poll ;poll的缺点;epoll
1.select的缺点: 1.select监听的文件描述符集合是一个数组,有上限(1024个) 2.select监听的文件描述符集合在应用层,内核层监听事件后需要传递给用户层带来资源开销 3.select需要用户手动查找产生事件的文件…...
keli5_报错 Cannot Load Device Description问题
1原因 之前创建的keli5的项目软件版本与当前的软件版本不同 使其算法要重新选择 2解决方法 2-1 点击图中的魔术棒 2-2 在这个界面中进入 Settings选项(ST-Link Debugger 旁边) 2-3 点击Flash Download 选项进入图中界面 在点击天加 2-4选择fla…...
算法的学习笔记—把二叉树打印成多行(牛客JZ78)
😀前言 在算法面试中,二叉树的层序遍历是一个经典的题目。而这道题的要求是进一步将二叉树的每一层结点值打印成多行,即同一层结点从左至右输出,最终结果存放到一个二维数组中返回。接下来,我们将通过代码实例详细解析…...
FreeRTOS 时间管理
延时函数介绍 函数 描述 vTaskDelay() 相对延时 xTaskDelayUntil() 绝对延时 相对延时:指每次延时都是从执行函数vTaskDelay()开始,直到延时指定的时间结束 绝对延时:指将整个任务的运行周期看成一个整体,适用于需要按…...
F. Valuable Cards D. Smithing Skill
D题 F题 F题: 因为是连续的且都要选,我们直接从左到右去取每个区间到不合法的情况即可,可以在n1的位置添加一个x来结束区间判断。因为是要乘积为x,那么我们只需要放x的因子进去,不然会超时,同时也可以用v…...
【电子通识】IPC-A-600中对验收标准的定义
在文章【电子通识】IPC-A-610标准对产品的四种验收条件都是什么意思?中我们讲到IPC-A-610标准(电子组件的可接受性)对于产品的四种验收条件。本文中我们同理讲一讲IPC-A-600中对验收标准的定义。 IPC-A-600文件中的多数示意图和照片同时表示每…...
MyBatis(初阶)
1.什么是MyBtis MyBatis是持久层框架,⽤于简化JDBC的开发。 2.准备工作 2.1 创建⼯程 数据库: 2.2 配置数据库连接字符串 以application.yml⽂件为例: 2.3 写持久层代码 Data public class UserInfo {private Integer id;private String username;private Stri…...
KDP数据平台:以实战案例验证技术领先力
本文由智领云 LeetTools 工具自动生成 申请试用: https://www.leettools.com/feedback/ 在当今快速发展的技术环境中,数据平台的选择对企业的数字化转型和业务发展至关重要。智领云开源KDP(Kubernetes Data Platform)在数据处理和…...
[Linux] 什么是 Shell?
一、什么是 shell ? shell在英语中的意思就是外壳,所以我们习惯称shell程序为壳程序。那为什么又会被叫做壳程序呢?那是因为shell程序是在内核上面的,属于操作系统的外壳部分,因此我们就称之为壳程序(shell)。 在 Linux 中&#…...
大模型学习应用 2:快速上手大模型基于langchain实现RAG检索应用
快速上手大模型基于langchain实现RAG检索应用 - 项目作业 目录 准备工作镜像选择算力选择安装包数据说明提示参考链接 Task1 申请 api 后,使用 langchain 导入大模型,并打印出大模型信息Task2 使用 langchian 加载数据,并把数据打印出来Task…...
python环境安装之后,cmd输入python回车会打开微软商店
坑爹!python环境安装之后,cmd输入python回车会打开微软商店 最近发现,安装python环境成功之后,可能会出现cmd输入python验证是否安装成功老会打开微软商店! 解决,打开系统环境配置,找到刚安装…...
USB Type-C如何取9V、12V、15V、20V电压-PD快充协议芯片ECP5701
相信大家在生活中也发现了,现在越来越多的设备都改用这种type-C接口的母座进行取电了。 因为欧盟决议 :自2024年起部分消费电子产品必须提供单一的USB-C充电接口。 那么这种type-C接口相比之前的Micro-B接口有着一个很大的优势就是可以有更高的电压&…...
Go 语言 Map 17
Go 语言提供了一个强大的 Map 结构体,用于存储键值对。Map 可以用来存储数据,快速查找和修改数据。下面是 Go 语言 Map 的使用教程。 什么是 Map? Map 是一个键值对的集合,它可以存储任意类型的键和值。Map 中的每个键都是唯一的…...
移植bash到openharmony
1.交叉工具链 下载地址: http://ci.openharmony.cn/workbench/cicd/dailybuild/dailylist 进入ohos-sdk-full,下载一个sdk版本,这里下载的版本是version-Master_Version-OpenHarmony_5.0.0.35-20240805_020232-ohos-sdk-full.tar.gz。 解…...
git stash详细教程
git stash详细教程 基本命令: git stash: 保存当前未提交的更改,并恢复到干净的工作目录。git stash list: 列出所有的 stash。git stash show: 显示最新 stash 的简要内容。git stash show -p: 显示最新 stash 的详细内容。 应用和删除: git stash apply: 应用最新…...
UDP网络攻击
UDP(User Datagram Protocol)作为一种无连接的网络传输协议,以其速度快和资源消耗小的特点,在多种网络服务中发挥着重要作用,UDP的无连接特性也使其成为DDoS攻击的优选协议。 UDP攻击概念 UDP攻击是一种网络攻击手段…...
漏洞扫描的重要性,如何做好漏洞扫描服务
随着互联网技术的飞速发展,网络安全问题已成为不容忽视的重大挑战。其中,系统漏洞威胁作为最常见且严重的安全危险之一,对组织和个人的信息资产构成了巨大威胁。下面我们就来了解下漏洞扫描的好处、漏洞扫描的操作方法以及如何做好网络安全。…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)
一、OpenBCI_GUI 项目概述 (一)项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台,其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言,首次接触 OpenBCI 设备时,往…...
深入理解Optional:处理空指针异常
1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...
windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...
