强、软、弱和虚引用

文章详细介绍了Java中的四种引用类型:强引用、软引用、弱引用和虚引用,以及它们在内存管理和垃圾回收中的作用。强引用的对象不会被垃圾回收,直到程序结束;软引用在内存不足时会被回收;弱引用的对象一旦被发现就会立即回收;虚引用必须配合引用队列使用,用于跟踪对象的回收过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

强引用

强引用指的是指向对象的引用,使用强引用指向的对象不会被当作垃圾,永远不会被垃圾回收机制所回收,即使出现了内存溢出异常

// 例如我们创建的对象
Object obj = new Object();// obj则为强引用

软引用(SoftReference)

使用软引用指向的对象,不会立即被垃圾回收器回收,而是当内存将要满的时候,先进行一次垃圾回收,如果此时内存还是不足,就会对使用弱引用指向的对象进行垃圾回收,对弱引用对象进行垃圾回收是在迫不得已的情况下才进行的。

Integera = 0;// 创建强引用
SoftReference<Integer> softReference = new SoftReference<>(a);// 将对象与软引用进行关联
a = null;// 销毁强引用

软引用也可以和引用队列一起使用,当软引用指向的对象被垃圾回收,Java虚拟机就会把这个软引用加入到与软引用关联的引用队列中,用于跟踪垃圾回收的过程。

Integer a = 0;// 创建强引用
ReferenceQueue<Integer> referenceQueue = new ReferenceQueue<>();// chuang创建引用队列
SoftReference<Integer> softReference = new SoftReference<>(a, referenceQueue);// 软引用和引用队列一起使用
a = null;// 销毁强引用

弱引用(WeakReference)

使用弱引用指向的对象,如果被垃圾回收器发现,就会立即被回收,不论内存中的空间是否充足。

Integer a = 0;// 创建强引用
WeakReference weakReference = new WeakReference(a);// 将对象与弱引用进行关联
a = null;// 销毁强引用

弱引用也可以和引用队列一起使用,当弱引用指向的对象被垃圾回收,Java虚拟机就会把这个软引用加入到与软引用关联的引用队列中,用于跟踪垃圾回收的过程。

Integer a = 0;// 创建强引用
ReferenceQueue<Integer> referenceQueue = new ReferenceQueue<>();// 创建引用队列
WeakReference weakReference = new WeakReference(a, referenceQueue);// 弱引用和引用队列一起使用
a = null;// 销毁强引用

虚引用(PhantomReference)

使用虚引用指向的对象,如果被垃圾回收器发现,就会被立即回收,虚引用必须和引用队列一起使用,当虚引用指向的对象被垃圾回收,Java虚拟机就会把这个虚引用加入到与虚引用关联的引用队列中,用于跟踪垃圾回收的过程。

Integer a = 0;// 创建强引用
ReferenceQueue<Integer> referenceQueue = new ReferenceQueue<>();// 创建引用队列
PhantomReference<Integer> phantomReference = new PhantomReference<>(a, referenceQueue);// 虚引用和引用队列一起使用
a = null;// 销毁强引用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值