news 2026/5/26 6:17:40

java 中四种引用类型介绍

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
java 中四种引用类型介绍

在java中,对象的引用强度被分为四种,从强到弱一次是:强引用 → 软引用 → 弱引用 → 虚引用

它们都位于 java.lang.ref 包中,主要用于内存管理、缓存设计、避免 OOM 等场景

一、强引用(Strong Reference)

1、定义:最常见、默认的引用方式,只要强引用还存在,GC永远不会回收该对象。
Object obj = new Object(); obj 就是一个强引用。

2、GC 行为:不会回收,即使内存不足,也不会回收。内存不足时直接抛
OutOfMemoryError
3、示例
Object obj = new Object();
obj = null; // 断开强引用
只有当obj = null后,对象才有资格被GC回收。

4、使用场景:业务核心对象,普通成员变量、局部变量,生命周期明确,不能被回收的对象。

二、软引用(Soft Reference)

1、定义:内存不足时才会被GC 回收,适合做缓存

SoftReference softRef = new SoftReference<>(new Object());

2、GC 行为: 内存充足->不回收。内存不足->优先回收软引用对象,比OOM更早回收。
3、示例
SoftReference<byte[]> ref = new SoftReference<>(new byte[10 * 1024 * 1024]);

byte[] data = ref.get(); // 可能为 null
使用前必须判空

4、使用场景:缓存系统(图片缓存、本地数据缓存)类似 LRU + JVM GC 的缓存策略

三、弱引用(Weak Reference)

1、定义:只要发生GC,就会被回收,不管内存是否充足
WeakReference weakRef = new WeakReference<>(new Object());
2、GC行为:只要发生GC->立刻回收,回收率非常高。

3、示例:
WeakReference weakRef = new WeakReference<>(new Object());
System.gc();
Object obj = weakRef.get(); // 大概率为 null
4、使用场景:
① WeakHashMap
Map<Object, String> map = new WeakHashMap<>();
key 是弱引用
key 没有强引用时,Entry 自动删除
② 防止内存泄漏
ThreadLocal
监听器(Listener)
回调对象 📌 ThreadLocal 内部就是弱引用 key

四、虚引用(Phantom Reference)

1、定义
最弱的一种引用
get() 永远返回 null
必须和 ReferenceQueue 配合使用

PhantomReference phantomRef =
new PhantomReference<>(new Object(), referenceQueue);
2、GC行为
对象被回收前 → 放入 ReferenceQueue
无法通过虚引用获取对象
3、示例:
ReferenceQueue queue = new ReferenceQueue<>();

PhantomReference ref =
new PhantomReference<>(new Object(), queue);

// 监控对象被回收
Reference<?> r = queue.poll();

4、使用场景
对象回收前通知
资源释放(直接内存、堆外内存)
NIO / Netty
Cleaner、Unsafe 底层机制

五、四种引用对比总结

引用类型GC 时是否回收get()典型用途
强引用❌ 永不回收有值普通对象
软引用内存不足才回收可能为 null缓存
弱引用GC 就回收大概率 null防泄漏
虚引用回收前通知永远 null资源释放
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/25 20:30:43

aTeX 学习笔记:学术文档排版

在实际应用中&#xff0c;如果我们仅仅需要完成的是《[[LaTeX学习笔记&#xff1a;文档排版基础]]》中所介绍的那些纯文本排版工作&#xff0c;其实并不一定需要用到 LATEX这样复杂的排版系统。毕竟&#xff0c;LATEX的核心优势主要在于其对数学公式、图表、参考文献等复杂文档…

作者头像 李华
网站建设 2026/5/26 6:15:44

零基础教程:5分钟用AI创建你的第一个抖音录播工具

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个最简单的抖音直播录制工具demo&#xff0c;要求&#xff1a;1.极简实现(不超过200行代码) 2.只需核心录制功能 3.提供最基础的命令行界面 4.包含最简单的错误提示 5.有清晰…

作者头像 李华
网站建设 2026/5/25 20:23:34

传统开发vsAI生成:Yande入口开发效率对比

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 构建一个功能完整的Yande搜索引擎入口页面&#xff0c;包含&#xff1a;1) 响应式搜索框 2) 热门标签云 3) 图片搜索结果网格展示 4) 分页功能 5) 图片详情弹窗。使用React前端框架…

作者头像 李华
网站建设 2026/5/26 5:34:29

1小时打造MissAV智能推荐系统原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 快速开发一个MissAV内容推荐系统原型&#xff0c;功能包括&#xff1a;1. 用户偏好收集 2. 内容特征提取 3. 相似度计算 4. 推荐结果展示 5. 反馈机制。使用Sentence Transformers处…

作者头像 李华
网站建设 2026/5/25 12:17:24

零基础教程:5分钟创建你的第一个Yande搜索入口

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 为初学者设计一个简单的Yande搜索引擎入口页面教程项目。包含基础HTML结构、CSS样式和极简JavaScript搜索功能。逐步指导如何添加搜索框、搜索结果展示区域和基本交互效果。提供详细…

作者头像 李华
网站建设 2026/5/25 14:07:07

AI如何自动获取国内NTP服务器IP地址

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个Python脚本&#xff0c;使用AI模型自动检测国内可用的NTP时间服务器IP地址。要求&#xff1a;1) 实现NTP协议的基本通信功能&#xff1b;2) 使用AI算法评估服务器响应时间和…

作者头像 李华