java 对象的四种引用类型

在Java中,对象的引用类型主要分为四种,它们分别是:

1. **强引用(Strong Reference)**:
   - 这是最常见的引用类型,比如 `Object obj = new Object()`; 就是一个强引用。
   - 只要强引用还存在,垃圾回收器就不会回收这个对象。

2. **软引用(Soft Reference)**:
   - 软引用通过 `java.lang.ref.SoftReference` 类实现。
   - 当系统内存不足时,垃圾回收器会回收软引用指向的对象来释放内存,但在此之前会清除这些对象的软引用。
   - 软引用通常用于实现内存敏感的缓存。

3. **弱引用(Weak Reference)**:
   - 弱引用通过 `java.lang.ref.WeakReference` 类实现。
   - 弱引用不会阻止垃圾回收器回收其指向的对象,也就是说,只要垃圾回收器发现了弱引用,就会回收其指向的对象,并且清除弱引用本身。
   - 弱引用常用于跟踪对象的生命周期,或者实现一些需要自动清理的数据结构。

4. **虚引用(Phantom Reference)**:
   - 虚引用通过 `java.lang.ref.PhantomReference` 类实现。
   - 虚引用的主要目的是在对象被回收后收到一个系统通知,或者实现延迟处理(比如延时写入磁盘)。
   - 虚引用必须和 `ReferenceQueue` 一起使用,当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会将这个虚引用加入到与之关联的 `ReferenceQueue` 中。

下面是一个简单的示例,展示如何使用软引用、弱引用和虚引用:

import java.lang.ref.*;

public class ReferenceTypesExample {
    public static void main(String[] args) {
        // 软引用示例
        SoftReference<String> softReference = new SoftReference<>(new String("Soft Reference"));
        System.out.println("Soft Reference: " + softReference.get());

        // 弱引用示例
        WeakReference<String> weakReference = new WeakReference<>(new String("Weak Reference"));
        System.out.println("Weak Reference: " + weakReference.get());

        // 虚引用示例
        PhantomReference<String> phantomReference = new PhantomReference<>(new String("Phantom Reference"), new ReferenceQueue<>());
        System.out.println("Phantom Reference: " + phantomReference.get());

        // 强制进行垃圾回收,观察引用行为
        System.gc();

        // 尝试再次获取引用,可能会发现它们已经被回收
        System.out.println("Soft Reference after GC: " + softReference.get());
        System.out.println("Weak Reference after GC: " + weakReference.get());
        // 虚引用不会返回对象,总是返回null
        System.out.println("Phantom Reference after GC: " + phantomReference.get());
    }
}

请注意,`System.gc()` 方法仅仅是一个建议,它请求 JVM 进行垃圾回收,但并不保证立即执行。实际的垃圾回收行为取决于 JVM 的实现和运行时的内存状况。
 

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值