2010-03-18 87 views
1

WeakHashMap.html的Javadoc,它說減少內存使用隨着WeakHashMap中

「WeakHashMap中的每個鍵對象 間接存儲爲 弱引用所指示的對象,因此一個鍵將 自動被刪除只有在 之後,對它的弱引用,無論是在 還是在地圖的外部,都被 清除了。「

然後

注意,值對象可以經由 參閱 間接其關鍵WeakHashMap中本身;也就是說,值 對象可能強烈地指代某個其他關鍵對象,其關聯的對象 又強烈地將 指向第一個值對象的關鍵字。

但是不應該在WeakHashMap中使用Key和Value兩個弱引用嗎? 即,如果內存不足,GC將釋放由值對象保存的內存(因爲在大多數情況下,值對象最有可能佔用比內存更多的內存)?

如果GC釋放Value對象,那麼Key對象也可以是免費的?

基本上,我正在尋找一個HashMap,當內存不足時(GC收集值和關鍵對象,如果需要的話)將減少內存使用量。

在Java中可能嗎?

謝謝。

回答

1

弱引用不適用於緩存 - NetBeans可以做到這一點,並且可以變得愚蠢。

SoftReference是你想要的。實際上很難做到 - 因此請複製別人的解決方案。有些人建議您自己明確管理緩存。

Reference僅適用於單個參考。有人建議在Java SE中增加「ephemerons」,但我還沒有看到任何實現。

+0

到目前爲止,我還沒有聽說過'SoftReference'的好東西。他們一直等到堆堆稀缺才能釋放,性能因GC活性增加而受到影響(好吧,也許在你的情況下它可以正常工作)。你也可以使用類似LRU的地圖。 Ehcache也是一個可能的解決方案。 –

1

想法是,您可以將此Map用作「查找」數據結構,該結構只保留鍵值對仍然可以引用(通過鍵)。儘管基本想法很好,但我記得它沒有我希望的那麼有用。