在番石榴圖書館,我很困惑爲什麼Cache.asMap()
不符合Cache.size()
,除非Cache.cleanUp()
被調用。爲什麼Cache.asMap()與Cache.size()不一致?
Cache<Object, Object> cache = CacheBuilder.newBuilder()
.expireAfterWrite(1, TimeUnit.SECONDS)
.build();
cache.get(...);
...
//After some seconds, all entries are expired.
//cache.asMap() is EMPTY Map, but cache.size() != 0
所以我的問題:是不是錯誤,Cache.asMap()
不是Cache.size()
一致? 雖然我注意到的Cache.size()
的Javadoc:
/**
* Returns the **approximate** number of entries in this cache.
*/
我只能猜測它涉及到併發環境。 Cache.cleanUp()
究竟做了什麼?
謝謝,查爾斯!我大致瀏覽了源代碼,'size()'只是對段的數量進行總結,正如您所提到的那樣 - 「遍歷整個緩存只是爲了獲得更準確的大小估計」:)高度複雜的設計! –