likes
comments
collection
share

Java的四种引用「强弱软虚」

作者站长头像
站长
· 阅读数 10

 Java的四种引用「强弱软虚」

四种引用

在Java中,有四种不同的引用类型,分别是强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)和虚引用(Phantom Reference)。

  1. 强引用(Strong Reference)是最常见的引用类型,它是指在程序中普遍存在的引用关系,只要强引用存在,垃圾回收器就不会回收被引用的对象。例如:
Object obj = new Object();

在上述代码中,obj是一个强引用,指向一个新创建的Object对象。只要obj存在,垃圾回收器就不会回收该对象。

  1. 软引用(Soft Reference)是一种相对强引用弱化了一些的引用类型。在系统将要发生内存溢出之前,会尽可能地回收软引用指向的对象。例如:
SoftReference<Object> softRef = new SoftReference<>(new Object());

在上述代码中,softRef是一个软引用,指向一个新创建的Object对象。当系统内存不足时,垃圾回收器可能会回收该对象。

  1. 弱引用(Weak Reference)是一种比软引用更弱化的引用类型。在垃圾回收器工作时,只要发现弱引用,不管系统内存是否充足,都会回收被引用的对象。例如:
WeakReference<Object> weakRef = new WeakReference<>(new Object());

在上述代码中,weakRef是一个弱引用,指向一个新创建的Object对象。当垃圾回收器发现该对象只有弱引用时,就会回收它。

  1. 虚引用(Phantom Reference)是最弱化的引用类型,它几乎没有引用的作用。虚引用主要用于跟踪对象被垃圾回收的状态,无法通过虚引用来获取对象的实例。例如:
ReferenceQueue<Object> queue = new ReferenceQueue<>();
PhantomReference<Object> phantomRef = new PhantomReference<>(new Object(), queue);

在上述代码中,phantomRef是一个虚引用,指向一个新创建的Object对象。当垃圾回收器准备回收该对象时,会将该虚引用添加到queue队列中。

以上是Java中的四种引用类型,它们在内存管理和垃圾回收方面有不同的特点和用途。

使用场景

  1. 强引用(Strong Reference): 强引用是最常见的引用类型,它是指在程序中普遍存在的引用关系,只要强引用存在,垃圾回收器就不会回收被引用的对象。强引用适用于那些必须保证对象一直存在的情况,但也容易导致内存泄漏。

  2. 软引用(Soft Reference): 软引用是一种相对强引用弱化了一些的引用类型,当内存不足时,垃圾回收器会尝试回收软引用指向的对象。软引用适用于缓存的场景,可以在内存不足时释放缓存,以避免OutOfMemoryError的发生。

  3. 弱引用(Weak Reference): 弱引用是比软引用更弱化了一些的引用类型,它的生命周期更短暂。当垃圾回收器进行垃圾回收时,无论内存是否充足,都会回收弱引用指向的对象。弱引用适用于临时性的引用,例如缓存中的临时对象。

  4. 虚引用(Phantom Reference): 虚引用是最弱化的引用类型,它的存在几乎没有意义,主要用于跟踪对象被垃圾回收的状态。虚引用必须与引用队列(ReferenceQueue)一起使用,当垃圾回收器准备回收一个对象时,如果发现它有虚引用,就会将虚引用加入到引用队列中。虚引用适用于一些需要在对象被回收时执行特定操作的场景。

以上是四种引用类型的使用场景,根据具体的需求和内存管理的要求,选择合适的引用类型可以更好地管理内存和避免内存泄漏问题。

转载自:https://juejin.cn/post/7283367128194252835
评论
请登录