google common cache - maximumSize的默认值(和其他"可选"设置) - 想要一个使用所有"可用"内存的缓存

der*_*itz 3 java memory caching heap-memory guava

我刚刚通过搜索缓存API 找到了Guava(它非常适合我的需求).但是在阅读wikiJavadoc时出现了一个问题- CacheBuilder可以采用什么设置的默认值?该Javadoc中的国家"这些功能都是可选的"和"创建一个新的CacheBuilder实例使用默认设置,包括强大的键,坚定的价值观,以及任何形式的自动驱逐."

在我看来,一个很好的默认值maximumSize是相对于Runtime.getRuntime().freeMemory();

最后,我想要一个使用给定系统上可用内存的缓存.所以我需要一个驱逐策略,询问有多少freeMemory()可用(可能相对于Runtime.getRuntime().maxMemory())

小智 6

实际上,可用内存并不是缓存驱逐度量的最佳选择.原因是垃圾收集.耗尽空闲内存可能只意味着现在是垃圾收集器运行的时候了,之后你会突然有大量的空闲内存.所以你不想因为你有大量的垃圾而从缓存中删除东西.

一种选择是使用softValues(),但我强烈建议不要这样做,因为软引用确实会损害生产性能.

正确的做法是仔细选择一个maximumSize实际上限制了缓存将消耗的总内存量.如果条目占用可变数量的空间,那么您可以使用它maximumWeight来建模.