[英]Use of Google-collections MapMaker?
這是我使用MapMaker
的一種方式的快速示例:
private final ConcurrentMap<Long, Foo> fooCache = new MapMaker()
.softValues()
.makeComputingMap(new Function<Long, Foo>() {
public Foo apply(Long id) {
return getFooFromServer(id);
}
});
public Foo getFoo(Long id) {
return fooCache.get(id);
}
當在地圖上調用get(id)
,它將返回該ID的映射中的Foo
,或者它將從服務器檢索它,緩存它並返回它。 一旦它成立,我就不必考慮它了。 另外,由於我已經設置了softValues()
,因此緩存無法填滿並導致內存問題,因為系統能夠根據內存需求清除緩存中的條目。 但是,如果從地圖中清除了緩存的值,它可以在下次需要時再次詢問服務器!
問題是,這只是一種可以使用的方式。 使地圖使用強,弱或軟鍵和/或值的選項,以及在特定時間后刪除條目的選項,可讓您使用它做很多事情。
如果您查看SoftReference
和WeakReference
的描述可能會有所幫助。
SoftReference
對於在緩存中使用非常有用,因為它們將在內存變低時被特別清除。
WeakReference
告訴垃圾收集器它可以收集引用它的對象,只要在其他地方沒有強引用它。 這通常用於可以根據需要快速查找的內容。
因此,考慮使用MapMaker為緩存創建帶有softValues的ConcurrentMap,為臨時查找表創建帶有weakKeys的ConcurrentMap。
編輯:softValues使用LRU策略。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.