我试图弄清楚您在Guava CacheBuilder maximumSize()中指定的数字代表什么。
假设我的代码中有类似的内容,
Cache<String, Object> programCache = CacheBuilder.newBuilder()
.maximumSize(1000)
.build();
我指定为最大大小的1000个是否意味着我可以在缓存中踢出LRU之前在缓存中添加一千个不同的条目(无论对象的大小如何)?在这种情况下,对象的大小是否受到限制?
还是那1000代表我有一个1000mb(MB正确吗?),并且在它开始踢出LRU之前,我可以在缓存中拥有尽可能多的对象(最多1000mb),这是我的意思吗?
最佳答案
maximumSize()
方法引用高速缓存中(大约)最大条目数。它不能保证缓存内容将消耗多少内存(正如Louis所指出的,没有任何Java对象可以这样做的合理方法)。
如果您有一种方法来衡量缓存特定对象的相对“成本”,则可以改为指定 maximumWeight()
。例如,如果要缓存byte[]
实例,则可以使用其长度作为权重,这将大致反射(reflect)其内存占用量。对于其他类型,您需要确定适当的“费用”代理概念。
关于java - Guava CacheBuilder maximumSize,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32321836/