强引用、软引用、弱引用、虚引用

在 Java 中,引用分为强引用、软引用、弱引用和虚引用四种类型。它们的特点和使用场景不同,下面我们来详细了解一下。

  • 强引用用于描述必须存在的对象,只要该对象被引用变量所引用,就不会被 GC 回收。

  • 软引用用于描述那些还有用但非必须的对象,在内存不足时会被回收。

  • 弱引用用于描述那些非必须的对象,并且它的生命周期比软引用更短,垃圾回收速度也更快。

  • 虚引用用于描述那些已经进入 finalization 队列,但是未被垃圾收集器真正回收的对象,它不能直接获取到对象的实例,只能在对象被回收时收到系统通知。

1.强引用(Strong Reference)

强引用是最常见的引用类型,在 Java 中默认的引用类型就是强引用。它是指在程序运行过程中,如果一个对象被一个强引用变量所引用,那么只要该变量还存在,垃圾收集器就不会回收这个对象。

示例代码:

Object obj = new Object(); // 强引用

 

2.软引用(Soft Reference)

软引用用于描述一些还有用但不必须的对象。当 JVM 内存不足时,垃圾收集器会根据软引用的引用关系来判断是否回收这些对象。

示例代码:

SoftReference softRef = new SoftReference<>("hello"); // 软引用
String str = softRef.get();

 

3.弱引用(Weak Reference)

弱引用是用于描述非必须对象的,只要该对象没有被任何强引用变量或软引用变量引用,即使存在弱引用变量,垃圾收集器也会回收这个对象。

示例代码:

WeakReference weakRef = new WeakReference<>("hello"); // 弱引用
String str = weakRef.get();

 

4.虚引用(Phantom Reference)

虚引用是最弱的一种引用类型,它只在被垃圾收集器回收时才会被使用。一个持有虚引用的对象,在任何时候都无法通过这个引用获得该对象的实例。可以使用虚引用监控对象的创建和销毁。

示例代码:

ReferenceQueue referenceQueue = new ReferenceQueue<>();
PhantomReference phantomRef = new PhantomReference(new Object(), referenceQueue); // 虚引用
Object object = phantomRef.get();
 
  

你可能感兴趣的:(jvm)