news 2026/5/4 21:14:24

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/1 4:44:50

Windows Server 2025 vs 2019:性能与效率全面对比

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个性能对比工具&#xff0c;能够测试Windows Server 2025和2019在相同硬件环境下的CPU、内存、磁盘I/O和网络性能。生成详细的对比报告&#xff0c;突出2025版本的改进点。点…

作者头像 李华
网站建设 2026/5/1 4:44:05

企业IT必看:批量卸载Office的自动化实践

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个企业级Office批量卸载工具&#xff0c;功能包括&#xff1a;1.AD域控集成扫描 2.多版本Office识别&#xff08;2013/2016/2019/O365&#xff09;3.静默卸载模式 4.日志记录…

作者头像 李华
网站建设 2026/5/4 14:59:29

电商系统中的Spring Bean实战应用案例

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 生成一个电商系统的Spring Bean应用案例&#xff0c;包含以下模块&#xff1a;1. 用户服务Bean&#xff0c;处理用户注册和登录&#xff1b;2. 订单服务Bean&#xff0c;管理订单创…

作者头像 李华
网站建设 2026/5/3 13:12:33

比原生快3倍!ThreadPoolExecutor的7个高效使用技巧

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建ThreadPoolExecutor性能优化示例集&#xff0c;展示&#xff1a;1) with上下文自动关闭 2) submit vs map性能对比 3) 异常捕获最佳实践 4) Future回调链式操作 5) 线程局部存储…

作者头像 李华
网站建设 2026/5/2 8:58:03

1小时打造个性化蓝屏分析工具原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 快速开发一个定制化蓝屏分析器原型&#xff0c;支持用户自定义规则&#xff1a;1)设置重点关注的关键词/驱动名黑名单 2)定义自动触发动作&#xff08;如禁用驱动/创建还原点&#…

作者头像 李华
网站建设 2026/5/4 8:10:05

Git提交效率提升300%:这些高阶技巧你知道吗?

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个Git效率工具包&#xff0c;包含&#xff1a;1. 智能git add选择器&#xff08;按文件类型/修改时间筛选&#xff09; 2. 批量处理未跟踪文件命令生成器 3. 交互式rebase辅助…

作者头像 李华