【943、java中的四种引用是什么?他们都有什么区别】

27 阅读2分钟

在Java中,有四种主要类型的引用,它们具有不同的生命周期和影响垃圾回收机制的方式。这四种引用类型是:

  1. 强引用(Strong Reference):

    • 强引用是最常见的引用类型。
    • 当一个对象具有强引用时,它不会被垃圾回收器回收,即使内存不足。
    • 如果没有强引用指向一个对象,该对象将被垃圾回收。
Object obj = new Object(); // 强引用
  1. 软引用(Soft Reference):

    • 软引用用于描述一些还有用但不是必需的对象。
    • 当内存不足时,垃圾回收器可以回收被软引用引用的对象。
    • 软引用通常用于实现内存敏感的高速缓存。
SoftReference<Object> softRef = new SoftReference<>(new Object()); // 软引用
  1. 弱引用(Weak Reference):

    • 弱引用比软引用更弱,通常用于描述非必需的对象。
    • 当垃圾回收器运行时,它会回收被弱引用引用的对象,无论内存是否充足。
WeakReference<Object> weakRef = new WeakReference<>(new Object()); // 弱引用
  1. 虚引用(Phantom Reference):

    • 虚引用也被称为幽灵引用,几乎没有直接的访问价值。
    • 主要用于跟踪对象被回收的情况,而不是获取对象的数据。
    • 当对象被垃圾回收器标记为可回收时,虚引用将被放入一个引用队列,以供进一步处理。
ReferenceQueue<Object> referenceQueue = new ReferenceQueue<>();
PhantomReference<Object> phantomRef = new PhantomReference<>(new Object(), referenceQueue); // 虚引用

引用类型之间的主要区别在于它们在垃圾回收时对对象的影响。强引用不会让对象被回收,而软引用、弱引用、虚引用允许对象在一定条件下被回收。软引用在内存不足时可能被回收,弱引用在任何时候都可能被回收,虚引用则通常用于跟踪对象被回收的情况。使用不同类型的引用可以帮助开发者更好地管理内存和资源。