在WeakHashMap.html的Javadoc,它說減少內存使用隨着WeakHashMap中
「WeakHashMap中的每個鍵對象 間接存儲爲 弱引用所指示的對象,因此一個鍵將 自動被刪除只有在 之後,對它的弱引用,無論是在 還是在地圖的外部,都被 清除了。「
然後
注意,值對象可以經由 參閱 間接其關鍵WeakHashMap中本身;也就是說,值 對象可能強烈地指代某個其他關鍵對象,其關聯的對象 又強烈地將 指向第一個值對象的關鍵字。
但是不應該在WeakHashMap中使用Key和Value兩個弱引用嗎? 即,如果內存不足,GC將釋放由值對象保存的內存(因爲在大多數情況下,值對象最有可能佔用比內存更多的內存)?
如果GC釋放Value對象,那麼Key對象也可以是免費的?
基本上,我正在尋找一個HashMap,當內存不足時(GC收集值和關鍵對象,如果需要的話)將減少內存使用量。
在Java中可能嗎?
謝謝。
到目前爲止,我還沒有聽說過'SoftReference'的好東西。他們一直等到堆堆稀缺才能釋放,性能因GC活性增加而受到影響(好吧,也許在你的情況下它可以正常工作)。你也可以使用類似LRU的地圖。 Ehcache也是一個可能的解決方案。 –