Java 面试题
目录

Java 中什么是强引用、软引用、弱引用、虚引用?

· 约 3 分钟读完 · 第 145 / 274 章

推荐答案

在Java中,引用类型主要分为四种:强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)和虚引用(Phantom Reference)。它们的主要区别在于垃圾回收器对待它们的方式不同。

  1. 强引用(Strong Reference):这是最常见的引用类型。只要强引用存在,垃圾回收器就永远不会回收被引用的对象。即使内存不足时,JVM也会抛出OutOfMemoryError,而不会回收强引用对象。

  2. 软引用(Soft Reference):软引用用来描述一些还有用但并非必需的对象。在内存不足时,垃圾回收器会回收这些对象。软引用通常用于实现内存敏感的缓存。

  3. 弱引用(Weak Reference):弱引用比软引用更弱一些。被弱引用关联的对象只能生存到下一次垃圾回收发生之前。当垃圾回收器工作时,无论当前内存是否足够,都会回收掉只被弱引用关联的对象。

  4. 虚引用(Phantom Reference):虚引用是最弱的一种引用关系。一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用来取得一个对象实例。虚引用主要用于跟踪对象被垃圾回收的活动。

本题详细解读

强引用(Strong Reference)

强引用是最常见的引用类型,通常我们通过new关键字创建的对象都是强引用。只要强引用存在,垃圾回收器就不会回收该对象。例如:

即使内存不足,JVM也不会回收obj所引用的对象,而是抛出OutOfMemoryError。

软引用(Soft Reference)

软引用通过SoftReference类来实现。软引用通常用于实现内存敏感的缓存。例如:

当内存不足时,垃圾回收器会回收软引用对象。如果内存充足,软引用对象不会被回收。

弱引用(Weak Reference)

弱引用通过WeakReference类来实现。弱引用比软引用更弱,垃圾回收器一旦发现只被弱引用关联的对象,就会立即回收它。例如:

即使内存充足,垃圾回收器也会回收只被弱引用关联的对象。

虚引用(Phantom Reference)

虚引用通过PhantomReference类来实现。虚引用主要用于跟踪对象被垃圾回收的活动。例如:

虚引用无法通过get()方法获取对象实例,它的主要作用是允许在对象被回收时收到一个系统通知。