表示maximumSize()指定缓存可以包含的最大条目数。请注意,缓存可能会在超出此限制之前逐出条目。
它会表现出与我们在GuavaCache中看到的相同的行为吗?由于默认ConcurrencyLevel为4,最大计数比预期的要小得多。
发布于 2020-01-05 18:49:43
这种措辞是为了提供实现的灵活性。在最新的版本中,它写道,
请注意,缓存可能会在超出此限制之前逐出条目,或者在逐出时暂时超过阈值。
Guava使用分段哈希表,其中每个段独立地逐出。这会导致从一个段中逐出,即使另一个段中有可用的空间,因为它们是独立的。由于被耦合到哈希表中,它还确保段不会超过其限制,即使是暂时的。
Caffeine不对逐出策略进行分段,也不使用自定义哈希表。这使得它可以在触发驱逐之前达到最大容量,但这确实意味着它将暂时超过最大容量。哈希表和逐出策略是分离的,其中在哈希表上发生写操作,然后通过writeBuffer将其传送到策略。这是一个立即耗尽的有界缓冲区,但是如果它以某种方式被填满了,那么它就会对编写器产生反压力,以允许驱逐保持下去。因此,在负载下,缓存可能会超出最大值一小部分,但永远不会出现失控增长。
migration guide总结了需要注意的重要变化。
最大大小(或加权大小)
在使用LRU算法达到最大大小之前,芭乐将被逐出。一旦使用Window TinyLFU算法超过阈值,咖啡因就会排出体外。
https://stackoverflow.com/questions/59598919
复制相似问题