Java中强引用,弱引用,软引用,虚引用区别
在Java中,强引用、弱引用、软引用和虚引用是用于描述对象引用强度的概念。它们之间的区别如下:
强引用(Strong Reference)
强引用是最常见的引用类型。当一个对象具有强引用时,垃圾回收器不会回收该对象。只有当该对象没有任何强引用时,才会被判定为可回收的垃圾对象。
示例:
Object obj = new Object(); // 强引用
弱引用(Weak Reference)
弱引用是一种比较弱的引用类型。当一个对象只有弱引用时,垃圾回收器在进行垃圾回收时会立即回收该对象。弱引用通常用于实现缓存、观察者模式等场景。
示例:
WeakReference<Object> weakRef = new WeakReference<>(obj); // 弱引用
软引用(Soft Reference)
软引用是介于强引用和弱引用之间的引用类型。当内存不足时,垃圾回收器会尝试回收软引用对象。与弱引用不同的是,软引用在回收之前会尽可能保持对象存活,只有当内存不足时才会被回收。
示例:
SoftReference<Object> softRef = new SoftReference<>(obj); // 软引用
虚引用(Phantom Reference)
虚引用是最弱的引用类型。虚引用的存在主要是为了跟踪对象被垃圾回收的状态。虚引用无法通过引用获取对象,也无法通过虚引用进行对象的操作。它主要用于在对象被回收时收到系统通知或执行特定的清理操作。
示例:
PhantomReference<Object> phantomRef = new PhantomReference<>(obj, referenceQueue); // 虚引用
总结:
强引用是最常见的引用类型,只有当没有任何强引用指向一个对象时,对象才会被回收。
弱引用在垃圾回收时会被立即回收。
软引用在内存不足时才会被回收,用于实现缓存等场景。
虚引用无法通过引用获取对象,主要用于跟踪对象被垃圾回收的状态。