Java四大引用类型:掌控GC的关键

Java中的四种引用类型(强引用、软引用、弱引用、虚引用)通过不同策略控制对象生命周期,直接影响垃圾回收(GC)行为。以下是详细解析:


1. 强引用(Strong Reference)

  • 特点:最常见的引用类型,只要强引用存在,对象绝不会被GC回收,即使内存不足也只会抛出OutOfMemoryError
  • 示例
    Object obj = new Object(); // 强引用
    obj = null; // 显式断开强引用后,对象才可被回收
    
  • 应用场景:普通对象引用,如局部变量或类成员变量。

2. 软引用(Soft Reference)

  • 特点:内存充足时保留对象,内存不足时GC会回收。适合实现缓存(如图片缓存)。
  • 实现类SoftReference
    SoftReference<byte[]> softRef = new SoftReference<>(new byte[10_000_000]);
    System.out.println(softRef.get()); // 内存不足时可能返回null
    
  • GC触发条件:JVM在抛出OOM前会回收所有软引用对象。

3. 弱引用(Weak Reference)

  • 特点:无论内存是否充足,GC时立即回收。常用于监听对象回收(如WeakHashMap)。
  • 实现类WeakReference
    WeakReference<String> weakRef = new WeakReference<>("test");
    System.gc(); // 强制GC后weakRef.get()通常返回null
    
  • 扩展应用:配合ReferenceQueue可追踪对象回收事件。

4. 虚引用(Phantom Reference)

  • 特点:无法通过虚引用获取对象,仅用于监听对象被回收后的系统通知。
  • 实现类PhantomReference(必须关联ReferenceQueue
    ReferenceQueue<Object> queue = new ReferenceQueue<>();
    PhantomReference<Object> phantomRef = new PhantomReference<>(new Object(), queue);
    // 对象回收后,phantomRef会被加入queue
    
  • 典型用途:管理堆外内存(如NIO的DirectByteBuffer)。

📌 引用强度与GC优先级总结

引用类型回收条件典型应用场景
强引用显式置为null或超出作用域常规对象引用
软引用内存不足时内存敏感缓存
弱引用每次GC监听对象回收(如缓存键)
虚引用对象回收后通知资源清理与堆外内存管理

通过这四种引用,开发者可以精细控制对象生命周期,平衡内存使用与性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码的余温

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值