Java中的四种引用类型

2 篇文章 0 订阅

1. 强引用(Strong Reference)

强引用是最常见的引用类型,它使用普通的对象引用来指向一个对象。只要存在强引用指向一个对象,即使内存不足(抛出OOM异常),垃圾回收器也不会回收该对象。

// 创建一个强引用
Object obj = new Object();

// 强引用仍然存在,对象不会被垃圾回收
System.out.println(obj);

图片来源:Java中的四种引用类型(java基础:你真的掌握了吗?) - 掘金

2. 软引用(Soft Reference)

软引用是一种相对较弱的引用类型。当内存不足时,垃圾回收器可能会回收被软引用指向的对象。软引用通常用于实现内存敏感的缓存,当内存不足时,可以通过回收软引用指向的对象来释放内存。

import java.lang.ref.SoftReference;

// 创建一个软引用
SoftReference<Object> softRef = new SoftReference<>(new Object());

// 获取软引用指向的对象
Object obj = softRef.get();

// 当内存不足时,垃圾回收器可能回收软引用指向的对象

图片来源:Java中的四种引用类型(java基础:你真的掌握了吗?) - 掘金

3. 弱引用(Weak Reference)

弱引用比软引用更弱,当垃圾回收器扫描到只有弱引用指向的对象时,无论内存是否充足,都会立即回收该对象。“一经发现,立即回收。”弱引用通常用于实现在对象被回收时进行特定操作的场景。

import java.lang.ref.WeakReference;

// 创建一个弱引用
WeakReference<Object> weakRef = new WeakReference<>(new Object());

// 获取弱引用指向的对象
Object obj = weakRef.get();

// 当垃圾回收器扫描到只有弱引用指向的对象时,会回收该对象

4. 虚引用(Phantom Reference)

虚引用是最弱的一种引用类型。与其他引用类型不同,虚引用并不能通过get()方法获取到引用的对象,主要用于跟踪对象被垃圾回收的状态。虚引用通常用于对象被回收后进行一些清理操作的场景。

import java.lang.ref.PhantomReference;
import java.lang.ref.ReferenceQueue;

// 创建一个引用队列
ReferenceQueue<Object> referenceQueue = new ReferenceQueue<>();

// 创建一个虚引用,并关联到引用队列上
PhantomReference<Object> phantomRef = new PhantomReference<>(new Object(), referenceQueue);

// 当对象被回收时,会将虚引用添加到引用队列中

Java中4种引用的级别由高到低依次为:强引用 > 软引用 > 弱引用 > 虚引用

这些引用类型在Java中提供了不同的回收机制和灵活性,可以根据具体的需求选择合适的引用类型来管理对象的生命周期。需要注意的是,软引用、弱引用和虚引用都继承自java.lang.ref.Reference类,并且需要使用java.lang.ref包中的相关类来处理这些引用类型。

相关参考

Java的四种引用类型史上最详细,再也不怕面试官

Java中的四种引用类型(java基础:你真的掌握了吗?) - 掘金

Java的4种引用类型_java的四种引用-CSDN博客

JVM 系列(5)吊打面试官:说一下 Java 的四种引用类型 - 知乎

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值