使用Guava CacheBuilder / MapMaker计算自定义缓存大小

时间:2011-09-01 09:38:21

标签: java guava

我想知道目前是否有一种方法可以使用Guava MapMaker或者是一种使用CacheBuilder的方法,以提供计算缓存是否在最大大小范围内的函数?

看起来当前驱逐仅仅基于缓存中的元素数量与.maximumSize()值相比,但是我想使用生成的地图作为位图的缓存,其中包含非常小或非常小的位图大条目。因此,我希望能够提供一个函数,根据正在使用的内存条数量来计算缓存大小,然后允许缓存在此基础上逐出。

2 个答案:

答案 0 :(得分:5)

我们目前只有maximumSize(int),但正在评估maximumWeight(int, Weigher<K, V>)的需求(该类型只有weigh(K, V)方法返回intdouble) 。你还应该想出重量应该是什么。

当然,此功能不会在一夜之间出现。

答案 1 :(得分:3)

对于CacheBuilder,JavaDocs似乎无法为CacheBuilder类和MapMaker类指定最大内存使用量。您只能设置最大元素数。

EhCache等缓存框架允许您指定缓存使用的堆的最大大小(和/或磁盘空间)。在EhCache中,您可以使用 maxBytesLocalHeap 和/或 maxBytesLocalDisk 构建器方法来指定此类行为。有关更多信息,请参阅CacheConfiguration的JavaDocs。