Java中的WeakReference是一种特殊的引用类型,它允许垃圾回收器在内存不足时自动回收其所引用的对象。要实现自动清理,你可以使用WeakReference结合垃圾回收器来实现。以下是一个简单的示例:
import java.lang.ref.Reference;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.WeakReference;
public class WeakReferenceExample {
public static void main(String[] args) {
ReferenceQueue<Object> referenceQueue = new ReferenceQueue<>();
WeakReference<Object> weakReference = new WeakReference<>(new Object(), referenceQueue);
System.out.println("Before GC: " + weakReference.get());
// 触发垃圾回收
System.gc();
try {
// 从ReferenceQueue中获取被回收的对象
Reference<?> ref = referenceQueue.remove();
if (ref == weakReference) {
System.out.println("Object has been garbage collected.");
}
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("After GC: " + weakReference.get());
}
}
在这个示例中,我们创建了一个WeakReference对象,它引用了一个新的Object实例。我们还创建了一个ReferenceQueue对象,用于跟踪被回收的引用。当我们调用System.gc()时,垃圾回收器可能会回收 WeakReference 所引用的对象。当对象被回收后,我们会从ReferenceQueue中获取被回收的引用,并输出相应的信息。
需要注意的是,我们不能保证垃圾回收器一定会立即回收WeakReference所引用的对象,因为这取决于垃圾回收器的实现和运行时环境。因此,自动清理的效果可能不是实时的。