番石榴缓存生成器最大大小

2022-09-03 07:51:17

我试图弄清楚你在Guava CacheBuilder maxSize()中指定的数字代表什么。

假设我的代码中有这样的东西,

Cache<String, Object> programCache = CacheBuilder.newBuilder()
    .maximumSize(1000)
    .build();

我指定为最大大小的 1000 是否意味着在缓存中可以有一千个不同的条目,然后它开始踢出 LRU(无论对象的大小如何)?如果是这种情况,对象的大小是否有限制?

或者1000是否意味着,我有一个1000mb(MB正确吗?)要处理,并且在它开始踢出LRU之前,我可以在缓存中拥有尽可能多的对象,直到1000mb?


答案 1

该方法是指缓存中的(近似)最大条目数。它不保证缓存的内容将消耗多少内存(正如Louis所指出的,任何Java对象都没有合理的方法来做到这一点)。maximumSize()

如果您有办法测量缓存特定对象的相对“成本”,则可以改为指定 maximumWeight()。例如,如果您正在缓存实例,则可以使用它们的长度作为权重,这将大致反映它们的内存占用量。对于其他类型,您需要确定适当的“成本”代理概念。byte[]


答案 2