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

Java 四种引用:强、软、弱、虚

在 Java 中并不是所有对象都只有 “存活” 和 “死亡” 两种状态。通过不同强度的引用我们可以让 GC 灵活决定对象的生命周期这也是面试、缓存设计、内存优化中的高频考点。一、为什么要有四种引用Java 最开始只有强引用也就是我们平时写的Object obj new Object();但强引用太 “霸道”只要引用还在对象永远不会被回收。在很多场景下比如缓存我们希望内存够就留着内存不够就回收用完就丢只想监听对象回收于是 JDK 提供了4 种引用级别让我们可以手动控制对象和 GC 的关系。二、四种引用总览一句话速记强引用最常用宁 OOM 不回收软引用内存不足才回收适合缓存弱引用只要 GC 就回收生命周期极短虚引用拿不到对象只用来监听回收三、详细讲解 代码示例1. 强引用Strong Reference特点永不回收只要引用还在GC 绝不会碰它。平时new出来的对象全部都是强引用。User user new User(1, zhangsan);只要user指向该对象对象就一定不会被回收。即使内存不够JVM 直接抛OOM也不会回收强引用对象。示例public class StrongReferenceTest { public static void main(String[] args) { User user new User(1, zhangsan); User user1 user; user null; System.gc(); // 依然能拿到对象 System.out.println(user1); } }使用场景业务对象、实体类、所有正常创建的对象。2. 软引用SoftReference特点内存不足 → 才回收。在 JVM即将抛出 OOM 之前会把软引用关联的对象列入回收范围。如果回收后内存还不够才会 OOM。SoftReferenceUser softRef new SoftReference(new User(1, zhangsan));示例设置-Xms10m -Xmx10mpublic class SoftReferenceTest { public static void main(String[] args) { SoftReferenceUser userSoftRef new SoftReference(new User(1, zhangsan)); System.out.println(userSoftRef.get()); try { // 占用大内存迫使 JVM 回收软引用 byte[] b new byte[1024 * 1024 * 7]; } catch (Throwable e) { e.printStackTrace(); } finally { // 已经被回收 System.out.println(userSoftRef.get()); } } }使用场景内存敏感的高速缓存本地缓存、图片缓存、Netty、EHCache 等。3. 弱引用WeakReference特点只要发生 GC就直接回收。不管内存够不够只要 GC 执行只被弱引用指向的对象一定会被回收。WeakReferenceUser weakRef new WeakReference(new User(1, zhangsan));示例public class WeakReferenceTest { public static void main(String[] args) { WeakReferenceUser userWeakRef new WeakReference(new User(1, zhangsan)); System.out.println(userWeakRef.get()); System.gc(); // GC 后直接为 null System.out.println(userWeakRef.get()); } }使用场景临时缓存防止内存泄漏如 ThreadLocal、WeakHashMap4. 虚引用PhantomReference特点拿不到对象实例仅用于监听回收。虚引用也叫幽灵引用、幻影引用。永远无法通过get()获取对象必须配合ReferenceQueue使用唯一作用监听对象什么时候被回收ReferenceQueue queue new ReferenceQueue(); PhantomReferenceUser phantomRef new PhantomReference(new User(1, tom), queue);示例public class PhantomReferenceTest { public static void main(String[] args) throws InterruptedException { User obj new User(1, zhangsan); ReferenceQueueObject queue new ReferenceQueue(); PhantomReferenceObject phantomRef new PhantomReference(obj, queue); obj null; System.gc(); Thread.sleep(1000); // 判断是否被回收 System.out.println(对象是否被回收 phantomRef.isEnqueued()); } }使用场景监听对象回收做资源释放堆外内存管理Netty 等框架大量使用四、四种引用对比表面试直接背引用类型回收时机获取对象主要用途强引用永不回收能正常业务对象软引用OOM 前回收能内存敏感型缓存弱引用GC 就回收能临时缓存、防泄漏虚引用随时可回收不能监听回收、释放资源五、面试高频总结背完稳过强引用为什么会 OOM强引用只要存在GC 绝不回收内存不够直接 OOM。软引用和弱引用的区别软引用内存不足才回收。弱引用只要 GC 就回收。软引用适合做什么缓存防止 OOM。弱引用常见场景ThreadLocal、WeakHashMap。虚引用能干什么监听对象回收无法获取对象用于资源释放。哪种引用完全不影响 GC虚引用。

相关文章:

Java 四种引用:强、软、弱、虚

在 Java 中,并不是所有对象都只有 “存活” 和 “死亡” 两种状态。通过不同强度的引用,我们可以让 GC 灵活决定对象的生命周期,这也是面试、缓存设计、内存优化中的高频考点。一、为什么要有四种引用?Java 最开始只有强引用&…...

改善快讯——北汇信息第五期业务骨干OBS训练营

2026 年 3 月7 日,北汇信息成功举办了第五期OBS训练营。新成立的交付中心和现场服务BU的业务骨干们齐聚北汇宁波分公司,体验学习OBS相关知识与工具,提升工作效率与团队协作能力,为自己和团队的进一步成长打下了良好的基础。本次活…...

华为OpenEuler实战指南(04)--Win10与openEuler双系统安装与优化

1. 双系统安装前的准备工作 在华为笔记本上安装openEuler和Win10双系统,第一步不是急着插U盘,而是要做好充分的准备工作。我见过太多人因为跳过准备步骤,导致安装过程中数据丢失或系统崩溃。根据我的经验,至少需要预留3小时完整时…...

因果瓦片归因:视觉模型的结构化与忠实解释

摘要 深度视觉模型的事后解释通常是在像素级别生成的,尽管现代架构和推理流程越来越多地基于诸如块、窗口和瓦片(tiles)这样的结构化单元进行操作。这种解释单元与计算单元之间的错位,常常导致生成的解释充满噪声、脆弱,并且在高风险场景下难以审查。我们提出了因果瓦片归…...

OpenClaw 配置 MiniMax M2.5 避坑指南

OpenClaw2026.3.13 配置 MiniMax M2.5 避坑指南═══════════════════════════════════════════════════════════════一、套餐说明MiniMax Coding Plan(开发套餐) ├─ Starter 月度套餐&…...

开源GUI编辑器lopaka发布V0.6版本,增加LVGL支持,同时支持 TFT_eSPI,U8g2,AdafruitGFX,Flipper Zero等

https://github.com/sbrin/lopaka?tabreadme-ov-file 更新记录: Lopaka 是一款开源图形编辑器,旨在为 TFT_eSPI、U8g2、AdafruitGFX 和 Flipper Zero 提供图形创建界面。它与 M5GFX、LovyanGFX、Watchy 等多种平台兼容。绘制任意图形,并将…...

Poppins开源字体:企业级多语言排版解决方案的商业价值深度分析

Poppins开源字体:企业级多语言排版解决方案的商业价值深度分析 【免费下载链接】Poppins Poppins, a Devanagari Latin family for Google Fonts. 项目地址: https://gitcode.com/gh_mirrors/po/Poppins 在全球化数字产品设计中,Poppins开源字体…...

灵毓秀-牧神-造相Z-Turbo与SpringBoot集成:打造智能文生图API服务

灵毓秀-牧神-造相Z-Turbo与SpringBoot集成:打造智能文生图API服务 本文介绍了如何将灵毓秀-牧神-造相Z-Turbo文生图模型集成到SpringBoot框架中,构建高效、易用的RESTful API服务,让开发者能够快速为应用添加智能图像生成能力。 1. 为什么需要…...

边缘计算在数据采集方面的应用可行性分析

一、边缘计算可行性分析及模块选择 1. 边缘计算核心价值适配场景 边缘计算的核心价值在于本地预处理、实时响应、降低云端带宽、离线可用,这与数据采集相关产品使用场景高度契合: 大型结构长期监测(风电、杆塔、储罐)&#xff…...

Ubuntu 20.04 LTS下AirSim+UE4.27环境搭建避坑指南(附百度网盘资源)

Ubuntu 20.04 LTS下AirSim与UE4.27开发环境高效部署实战 在无人机仿真开发领域,Linux平台因其稳定性和高效性备受开发者青睐。然而,当技术栈涉及虚幻引擎(UE)和AirSim这样的复杂工具链时,环境搭建往往成为项目启动的第一道门槛。本文将分享一…...

VR爱国教育学习机|让红色精神在沉浸体验中代代传承

在数字化教育迅速发展的今天,传统的爱国主义教育正迎来全新的表达方式。VR爱国教育学习机的出现,为学校、社区、展馆等教育场景注入了科技力量,让“沉浸式学习”成为新时代爱国教育的新趋势。这款融合虚拟现实(VR)技术…...

OpenClaw多平台部署指南

OpenClaw 多平台部署完整指南 根据您的需求,我将详细说明 OpenClaw("龙虾")在 Windows 和 Linux 系统上的完整部署流程。OpenClaw 是一个开源的 AI 智能体平台,支持多模型接入和企业级应用集成 。 一、环境准备与前置…...

GME多模态向量-Qwen2-VL-2B实战教程:为LLM提供多模态上下文增强的RAG集成方案

GME多模态向量-Qwen2-VL-2B实战教程:为LLM提供多模态上下文增强的RAG集成方案 你是不是遇到过这样的问题?想让大语言模型(LLM)帮你分析一份复杂的PDF报告,但模型只能看到文字,对里面的图表、流程图、示意图…...

从LLM到Agent:大语言模型核心概念指南

文章目录一、LLM二、Token三、Context核心作用与特点:Context Window四、RAG为什么需要RAGRAG如何工作五、Prompt六、Tool七、MCPMCP是什么?为什么需要MCP八、Agent九、Agent Skill1、什么是Agent Skill2、为什么需要 Agent Skill?2.1 当前 A…...

Stable Diffusion XL 1.0艺术化落地:灵感画廊在数字藏品(NFT)创作工作流整合

Stable Diffusion XL 1.0艺术化落地:灵感画廊在数字藏品(NFT)创作工作流整合 1. 项目背景与核心价值 在数字艺术创作领域,技术门槛往往成为创作者表达创意的障碍。传统AI绘画工具虽然功能强大,但工业化界面和复杂参数…...

新手必看:Super Qwen Voice World语音合成历史记录保存全攻略

新手必看:Super Qwen Voice World语音合成历史记录保存全攻略 1. 项目介绍与学习目标 Super Qwen Voice World是一个基于Qwen3-TTS技术构建的复古像素风语音合成平台。它将复杂的语音合成过程转化为一场8-bit游戏冒险,让用户通过点击蘑菇按钮、输入&qu…...

CosyVoice 容器化实战:Docker 部署最佳实践与性能调优

最近在做一个语音合成项目,用到了 CosyVoice 这个优秀的开源语音模型。在本地开发调试时一切顺利,但一到要部署到服务器上,各种环境依赖、版本冲突的问题就冒出来了。更别提多台服务器之间环境不一致带来的麻烦。痛定思痛,决定把整…...

gte-base-zh效果对比:不同文本相似度算法实测分析

gte-base-zh效果对比:不同文本相似度算法实测分析 1. 文本相似度算法概述 1.1 文本相似度计算的核心价值 文本相似度计算是自然语言处理中的基础任务,它能够量化两段文本在语义层面的接近程度。这项技术在多个领域有广泛应用: 搜索引擎结…...

工业铁盒宇宙:前言.当工厂开始拥有生命

前言.当工厂开始拥有生命 有没有想过,在每天习以为常的世界背后,有个庞然大物在默默转着圈儿?它不发脾气,却稳稳把城市节奏控住;它没心跳,却推着全球生产往前滚;它不说话,却跟万物嘀…...

Magpie窗口放大终极指南:免费开源工具让模糊窗口变清晰

Magpie窗口放大终极指南:免费开源工具让模糊窗口变清晰 【免费下载链接】Magpie An all-purpose window upscaler for Windows 10/11. 项目地址: https://gitcode.com/gh_mirrors/mag/Magpie 还在为老游戏、老软件在现代高分辨率显示器上显示模糊而烦恼吗&am…...

课堂任务完成

...

删除语句delete

...

485总线通信老丢数据?手把手教你终端电阻的选型与焊接避坑指南

485总线通信故障排查:终端电阻的实战选型与焊接技巧 在工业自动化现场,RS-485总线就像设备的神经系统,承载着关键的控制信号传输。但许多工程师都遇到过这样的困扰:明明线路连接正确,通信却频繁丢包,甚至出…...

第三章 硬件基础知识学习3.4 3.5 3.6

3.4 74HC138三八译码器的应用在设计单片机电路的时候,单片机的I/O口数量是有限的,有时满足不了产品需求,比如STC89C52一共有32个I/O口,但是为了控制更多的器件,就可以使用一些外围的数字芯片,这类数字芯片…...

[安洵杯 2019]easy misc

打开附件后有一个加密的压缩包,一个图片,和一堆文本查看压缩包发现有一段提示计算后得到FLAG IN 7NNULLULL,尝试把FLAG IN 7NNULLULL,当作密码写入发现失败猜测是掩码爆破七位数字NNULLULL,爆破成功2019456NNULLULL,打开decode.txt文件发现是一个映射表尝…...

iPerf3 -M参数实战指南:如何在不同网络环境下优化TCP性能(附真实测试数据)

iPerf3 -M参数实战指南:如何在不同网络环境下优化TCP性能(附真实测试数据) 作为一名网络测试工程师,你是否曾在深夜被紧急叫醒处理莫名其妙的TCP吞吐量下降问题?是否经历过跨国专线测试时,明明带宽充足却始…...

第8节:多维网格——如何处理二维三维数据

引言一维数组只是开始,图像、体数据才是真实世界前几节我们处理的都是一维数组:向量加法、矩阵乘法虽然逻辑上是二维,但我们用一维索引线性化来处理。这种方式虽然可行,但代码不够直观,尤其当数据本身具有二维或三维结…...

Linux用户与组管理

1.添加新的用户1.1指定新账号的登录名2.删除账号2.2常用的选项是 -r,它的作用是把用户的主目录一起删除3.修改账号4.用户口令的管理4.1修改密码5.增加一个新的用户组使用groupadd命令6.要删除一个已有的用户组,使用groupdel命令7.修改用户组的属性使用gr…...

MCP 2026国产化部署权威认证路径全拆解:从等保2.0三级到商用密码应用安全性评估(GM/T 0054)一次过审要点

第一章:MCP 2026国产化部署的合规性定位与战略价值MCP 2026(Multi-Cloud Platform 2026)作为新一代自主可控云原生平台,其国产化部署已纳入《关键信息基础设施安全保护条例》与《信创产业十四五规划》双重合规框架。该平台在架构设…...

CnOpenData 证券另类子公司从业职业经历变化表

证券从业人员是指被中国证监会依法批准的证券从业机构正式聘用或与其签订劳务协议的人员。证券从业人员必须按照有关规定在中国证监会取得证券从业人员资格证书后方可在各项证券专业岗位上工作;证券中介机构的正副总经理高级管理人员中至少应有三分之二以上应获得证…...