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所引用的對象,因為這取決于垃圾回收器的實現和運行時環境。因此,自動清理的效果可能不是實時的。