我想知道目前是否有一种方法可以使用Guava MapMaker或者是一种使用CacheBuilder的方法,以提供计算缓存是否在最大大小范围内的函数?
看起来当前驱逐仅仅基于缓存中的元素数量与.maximumSize()值相比,但是我想使用生成的地图作为位图的缓存,其中包含非常小或非常小的位图大条目。因此,我希望能够提供一个函数,根据正在使用的内存条数量来计算缓存大小,然后允许缓存在此基础上逐出。
答案 0 :(得分:5)
我们目前只有maximumSize(int)
,但正在评估maximumWeight(int, Weigher<K, V>)
的需求(该类型只有weigh(K, V)
方法返回int
或double
) 。你还应该想出重量应该是什么。
当然,此功能不会在一夜之间出现。
答案 1 :(得分:3)
对于CacheBuilder,JavaDocs似乎无法为CacheBuilder类和MapMaker类指定最大内存使用量。您只能设置最大元素数。
EhCache等缓存框架允许您指定缓存使用的堆的最大大小(和/或磁盘空间)。在EhCache中,您可以使用 maxBytesLocalHeap 和/或 maxBytesLocalDisk 构建器方法来指定此类行为。有关更多信息,请参阅CacheConfiguration的JavaDocs。