JVM内存管理中的引用与引用强弱关系
2023-11-19 10:39:38
JVM强软弱虚引用记录
在Java中,引用是变量对对象的一类关联。根据引用的强弱关系,可以分为四种不同的类型:强引用、软引用、弱引用和虚引用。这些引用类型对对象的生命周期和内存管理起着至关重要的作用。
强引用
强引用是最常见的引用类型,也是最简单的引用类型。当一个对象存在着强引用指向它时,该对象就不会被垃圾回收器回收。强引用是通过变量来实现的,例如:
Object obj = new Object();
当我们创建一个新的对象时,就会创建一个强引用来指向它。强引用是最强的引用类型,只要强引用存在,对象就不会被回收。
软引用
软引用是一种弱于强引用的引用类型。当一个对象存在着软引用指向它时,该对象可以被垃圾回收器回收,但前提是该对象没有被强引用指向。软引用通常用于缓存数据或临时对象。软引用可以通过java.lang.ref.SoftReference
类来实现,例如:
SoftReference<Object> softRef = new SoftReference<>(obj);
当垃圾回收器回收对象时,它会首先检查对象是否有软引用指向它。如果有软引用指向它,则垃圾回收器不会立即回收该对象,而是将其放入引用队列中。当垃圾回收器再次运行时,它会检查引用队列中的对象。如果对象仍然存在软引用指向它,则垃圾回收器会将其从引用队列中移除,并将其回收。
弱引用
弱引用是一种比软引用更弱的引用类型。当一个对象存在着弱引用指向它时,该对象可以被垃圾回收器回收,无论该对象是否被强引用指向。弱引用通常用于缓存数据或临时对象。弱引用可以通过java.lang.ref.WeakReference
类来实现,例如:
WeakReference<Object> weakRef = new WeakReference<>(obj);
当垃圾回收器回收对象时,它会首先检查对象是否有弱引用指向它。如果有弱引用指向它,则垃圾回收器会立即将其回收。
虚引用
虚引用是一种最弱的引用类型。当一个对象存在着虚引用指向它时,该对象可以被垃圾回收器回收,无论该对象是否被强引用、软引用或弱引用指向。虚引用通常用于跟踪对象的回收情况。虚引用可以通过java.lang.ref.PhantomReference
类来实现,例如:
PhantomReference<Object> phantomRef = new PhantomReference<>(obj);
当垃圾回收器回收对象时,它会将该对象的虚引用添加到虚引用队列中。当垃圾回收器再次运行时,它会检查虚引用队列中的虚引用。如果虚引用指向的对象已经被回收,则垃圾回收器会将其从虚引用队列中移除。
总之,JVM中的四种引用级别分别是强引用、软引用、弱引用和虚引用。这些引用类型对对象的生命周期和内存管理起着至关重要的作用。强引用是最常见的引用类型,只要强引用存在,对象就不会被回收。软引用比强引用弱,当内存不足时,对象可以被回收。弱引用比软引用更弱,当内存不足时,对象可以被立即回收。虚引用是最弱的引用类型,无论内存是否不足,对象都可以被回收。