最新版本的優秀番石榴圖書館更新了緩存apis。現在,CacheBuilder擁有一個maxmimumWeight()方法來對高速緩存實施最大權重。 javadoc狀態:做番石榴緩存考慮重量在驅逐選擇?
指定緩存可能包含的條目的最大權重。重量 使用稱重器指定的稱重器確定,並且使用 此方法在調用 構建(com.google.common.cache.CacheLoader)之前需要相應調用稱重器。
請注意,緩存可能會在超出此限制之前驅逐一個條目。 隨着高速緩存大小增加接近最大值,高速緩存將會刪除不太可能再次使用的條目 。例如,高速緩存可能會刪除一個條目,因爲它最近還沒有被使用或經常使用。
當Cache需要驅逐一個條目時,它會考慮權重嗎?例如,如果重量較大的物品比任何小物品更頻繁地使用,但是比所有小物品一起使用的次數少,那麼保留幾個小重量的物品可能比一個大重量的物品更好。
該文檔現在說:「請注意,權重僅用於確定緩存是否超出容量;對選擇下一個應該逐出的條目沒有影響。」 http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/cache/CacheBuilder.html#maximumSize(long) – 2014-02-22 03:14:57