我需要將一些數據與其生命週期中的某個關鍵字相關聯,所以我使用的是WeakHashMap
。但是,另外我需要通過相應的值獲取密鑰。最簡單的方式做到這一點是建立一個值時,扶住參考:如果該值包含唯一對該密鑰的強引用,是否會收集WeakHashMap的條目?
public class Key {}
public class Value {
final public Key key;
public Value(Key k) {
key = k;
}
}
當然,雖然我在程序中使用Value
,其key
不會消失。但是,如果在地圖之外沒有更多關鍵字或其值的引用,它是否會被垃圾收集?還是值得生存的強有力的參考預防呢?
+1也許我應該先閱讀文檔。 :) – biziclop
@biziclop同樣來自Javadoc:處理這個問題的一種方法是在插入之前將值本身包含在WeakReferences中,如:m.put(key,new WeakReference(value)),然後展開每個get。 這應該做的伎倆! – laguille
要麼只是存儲對值對象中的鍵的弱引用。因爲如果將值包含在WR中,則最終可能會收集一個已收集值爲al的值的現有密鑰。 – biziclop