Java四种引用类型(强引用、软引用、弱引用、虚引用)详解

先说结论

强度由强到弱 :强引用 > 软引用 > 弱引用 > 虚引用

在Java中,引用是指在程序中使用的指向对象的指针或句柄,可以用来访问对象的属性和方法。Java中有四种不同类型的引用:强引用、软引用、弱引用和虚引用。

1、强引用(Strong Reference)

强引用是最常见的引用类型,也是默认的引用类型。如果一个对象具有强引用,即使在内存不足的情况下,垃圾回收器也不会回收该对象。例如:

Object obj = new Object();

在这个示例中,obj是一个强引用,它指向一个新的Object对象。只要obj存在,该对象就不会被垃圾回收器回收。

2、软引用(Soft Reference)

软引用是一种比强引用弱的引用类型。如果一个对象只有软引用,那么当系统内存不足时,垃圾回收器可能会回收该对象,但不是一定回收。软引用通常用于缓存数据,如果系统内存不足,则可以清理缓存中的一些数据。例如:

SoftReference<Object> softRef = new SoftReference<>(new Object());

在这个示例中,softRef是一个软引用,它指向一个新的Object对象。如果系统内存不足,垃圾回收器可以回收该对象,但不是一定回收。

3、弱引用(Weak Reference)

弱引用比软引用更弱,如果一个对象只有弱引用,那么当垃圾回收器运行时,不论内存是否充足,都会回收该对象。弱引用通常用于实现回调函数和监听器,因为它们可以避免内存泄漏。例如:

WeakReference<Object> weakRef = new WeakReference<>(new Object());

在这个示例中,weakRef是一个弱引用,它指向一个新的Object对象。当垃圾回收器运行时,不论内存是否充足,都会回收该对象。

4、虚引用(Phantom Reference)

虚引用是最弱的引用类型,一个对象如果只有虚引用,那么在任何时候都可能被垃圾回收器回收。虚引用通常用于管理堆外内存,例如在DirectByteBuffer中,虚引用可以被用来跟踪垃圾回收器在内存不足时释放堆外内存。例如:

ReferenceQueue<Object> queue = new ReferenceQueue<>();
PhantomReference<Object> phantomRef = new PhantomReference<>(new Object(), queue);

在这个示例中,phantomRef是一个虚引用,它指向一个新的Object对象,并且有一个关联的ReferenceQueue。当垃圾回收器回收该对象时,它会将一个引用放入

你可能感兴趣的:(Java,java,jvm)