浙江坤宇建设有限公司 网站,软件网站免费,wordpress静态html,网站描述技巧在Java中#xff0c;有四种类型的引用#xff0c;它们定义了对象被垃圾收集器(GC)处理的不同时机。这四种引用分别是#xff1a;
强引用#xff08;Strong Reference#xff09;软引用#xff08;Soft Reference#xff09;弱引用#xff08;Weak Reference#xff0…在Java中有四种类型的引用它们定义了对象被垃圾收集器(GC)处理的不同时机。这四种引用分别是
强引用Strong Reference软引用Soft Reference弱引用Weak Reference虚引用Phantom Reference
下面我将结合代码对这四种引用类型进行介绍。
1. 强引用Strong Reference
强引用是Java中最常见的引用类型垃圾收集器不会回收这种对象。当对象被强引用关联时它将一直被JVM保留直到强引用被显式地设置为null或者超出作用域。
Object strongObject new Object();
// 只要strongObject存在GC就不会回收new Object()创建的对象2. 软引用Soft Reference
软引用比强引用要弱一些。软引用关联的对象在内存充足时会被保留但如果内存不足垃圾收集器会回收这些对象以释放内存资源。软引用通常用于实现内存敏感的缓存。
import java.lang.ref.SoftReference;Object obj new Object();
SoftReferenceObject softRef new SoftReference(obj);
obj null; // 删除强引用但是softRef仍然可以访问对象直到下一次GC运行并回收对象// 在堆内存足够时可以通过软引用获取对象
Object cachedObject softRef.get();
if (cachedObject null) {// 对象已被垃圾回收器回收
}3. 弱引用Weak Reference
弱引用的强度比软引用更弱。无论当前的内存空间是否充足只要垃圾收集器运行弱引用关联的对象就有可能被回收。弱引用通常用于临时缓存等场景例如监听器的管理。
import java.lang.ref.WeakReference;Object weakObject new Object();
WeakReferenceObject weakRef new WeakReference(weakObject);
weakObject null; // weakObject被设置为null后下一次GC运行时weakRef所引用的对象将被回收Object reapObject weakRef.get();
if (reapObject null) {// 对象可能已经被垃圾回收了
}4. 虚引用Phantom Reference
虚引用是所有引用类型中最弱的一种。虚引用关联的对象几乎总是在任何时候都可被垃圾收集器回收它们不能直接获取关联对象的引用。虚引用的主要作用是跟踪对象被垃圾收集器回收的活动用于执行一些对象被回收前需要完成的操作如资源的释放等。
import java.lang.ref.PhantomReference;
import java.lang.ref.ReferenceQueue;Object phantomObject new Object();
ReferenceQueueObject refQueue new ReferenceQueue();
PhantomReferenceObject phantomRef new PhantomReference(phantomObject, refQueue);
phantomObject null; // phantomObject被设置为null对象可能在任何时候被GC回收
// 可以通过refQueue来检查对象是否已经被回收
// 垃圾收集器执行回收前虚引用会被加入到绑定的引用队列中
// 判断是否被处理可以通过引用队列来完成
if (refQueue.poll() ! null) {// 对象被垃圾回收器标记并准备进行回收
}在使用这些引用类型时需要注意的是软引用、弱引用和虚引用都是通过java.lang.ref包中的类实现的。这些引用类型的使用可以帮助我们更细致地控制对象的生命周期以及在内存管理和优化方面提供更多的灵活性。