我想弄清楚你在Guava CacheBuilder maximumSize()中指定的数字是什么。
说我的代码中有这样的东西,
Cache<String, Object> programCache = CacheBuilder.newBuilder()
.maximumSize(1000)
.build();
我指定为最大大小的1000是否意味着在开始踢出LRU之前我可以在缓存中有一千个不同的条目(无论对象的大小是多少)?如果是这种情况,对象的大小是否有限制?
或者1000意味着,我有一个1000mb(MB是正确的吗?)可以使用,我可以拥有尽可能多的高速缓存中的对象,因为我想要在开始踢出LRU之前达到1000mb? / p>
答案 0 :(得分:3)
maximumSize()
方法是指缓存中条目的(近似)最大数量。它不能保证缓存的内容将占用多少内存(正如路易斯指出的那样,任何Java对象都没有合理的方法这样做)。
如果你有办法衡量相对成本&#34;缓存特定对象时,您可以指定maximumWeight()
。例如,如果您正在缓存byte[]
实例,则可以使用它们的长度作为权重,这将大致反映其内存占用量。对于其他类型,您需要确定适当的代理概念&#34;费用&#34;。