Java中,垃圾回收是非常重要的一部分,而軟引用和虛引用則是垃圾回收機制的重要部分。
軟引用可以用來描述那些還有用但并非必需的對象。如果內存空間足夠,那么被軟引用指向的對象就會保留在內存中,否則就會被回收。軟引用可以通過在程序中使用java.lang.ref.SoftReference類進行創建。
// 創建一個普通對象 Object object = new Object(); // 創建一個軟引用 SoftReference<Object> softReference = new SoftReference<>(object); // 清除對象 object = null;
虛引用也可以用來描述那些還有用但并非必需的對象,但和軟引用不同的是,虛引用并不能通過它來獲取被引用的對象。虛引用可以用來跟蹤對象被垃圾回收的狀態。虛引用可以通過在程序中使用java.lang.ref.PhantomReference類進行創建。
// 創建一個普通對象 Object object = new Object(); // 創建虛引用 PhantomReference<Object> phantomReference = new PhantomReference<>(object, referenceQueue); // 清除對象 object = null;
虛引用主要用于在對象被回收時收到通知或者執行一些清理操作。例如,當JVM通過Finalizer線程回收對象時,如果這個對象是被虛引用引用的,那么虛引用對應的對象就會進入一個已經準備好被清理的狀態,并且可以通過ReferenceQueue獲得通知。