2012-03-18 119 views
0

可能重複:
Why is softKeys() deprecated in Guava 10?爲什麼MapMaker.softKeys()已棄用?

爲什麼MapMaker.softKeys() Javadoc中被棄用的原因:

使用softValues創建內存敏感的映射,或weakKeys創建 一個不包含對密鑰的強引用的映射。 此方法 預定要刪除在2013年1月

這種方法打破。使用軟鍵的地圖與具有弱鍵的地圖相比不具有功能優勢,並且通過在地圖中保留 不可達元素而浪費了內存。如果您的目標是創建一個 內存敏感的映射,請考慮使用軟值。

指定存儲在映射中的每個鍵(不是值)應該包含在SoftReference中(默認情況下使用強引用) 。 爲了響應內存需求,軟引用對象將以全局最近最少使用的方式進行垃圾回收。

我不明白爲什麼軟值更喜歡軟鍵?任何情況? MapMaker.softValues()仍然可用。謝謝!

回答

3

地圖與軟弱的項目有兩個主要用例:

  • 緩存。具有軟值的映射可以充當內存敏感的緩存。由於高速緩存的軟引用條目的語義是在需要空閒內存時收集的。

  • Canonicalizing映射。有時您需要將附加屬性(值)與現有對象(一個鍵)相關聯。這種關聯不應該阻止密鑰被收集,並且在收集密鑰後它沒有意義。這樣的關聯可以被實現爲具有弱密鑰的地圖。

注意,在後一種情況下使用軟鍵而不是弱密鑰沒有任何意義,並導致不必要的內存使用,從而使軟鍵有沒有實際用處,這就是爲什麼他們已被棄用。

相關問題