我刚刚发现Guava http://code.google.com/p/guava-libraries/通过搜索缓存 API(它非常适合我的需求)。
但读完后出现一个问题wiki http://code.google.com/p/guava-libraries/wiki/CachesExplained and Javadoc http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/cache/package-summary.html- CacheBuilder 可以采用的默认设置值是什么?这Javadoc http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/cache/CacheBuilder.html声明“这些功能都是可选的”和“使用默认设置构造一个新的 CacheBuilder 实例,包括强键、强值,并且不进行任何类型的自动驱逐。”
在我看来,一个很好的默认值maximumSize
将相对于Runtime.getRuntime().freeMemory();
最后,我想要一个使用给定系统上可用内存的缓存。所以我需要一个驱逐策略来询问多少freeMemory()
是可用的(可能相对于Runtime.getRuntime().maxMemory()
)
实际上,可用内存并不是缓存驱逐的一个很好的指标。原因是因为垃圾收集。可用内存耗尽可能只是意味着现在是垃圾收集器运行的时候了,之后您会突然拥有大量可用内存。那么你don't仅仅因为积累了很多垃圾就想从缓存中删除一些东西。
一种选择是使用softValues()
,但我强烈建议不要这样做,因为软引用确实会损害生产性能。
正确的做法是谨慎选择maximumSize
这本质上限制了缓存将消耗的内存总量。如果条目占用不同数量的空间,那么您可以使用maximumWeight
而是对其进行建模。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)