表示 maximumSize() 指定缓存可能包含的最大条目数。请注意,缓存可能会在超出此限制之前驱逐条目。
它会表现出与我们在 GuavaCache 中看到的相同的行为,因为默认 ConcurrencyLevel 为 4 ,因此最大计数远低于预期?
表示 maximumSize() 指定缓存可能包含的最大条目数。请注意,缓存可能会在超出此限制之前驱逐条目。
它会表现出与我们在 GuavaCache 中看到的相同的行为,因为默认 ConcurrencyLevel 为 4 ,因此最大计数远低于预期?
这种措辞是为了提供实施灵活性。在最新版本中,它显示,
请注意,缓存可能会在超过此限制之前驱逐条目,或者在驱逐时暂时超过阈值。
Guava 使用分段哈希表,其中每个段独立驱逐。这会导致从一个段中逐出,即使另一个段中有可用空间,因为它们是独立的。由于耦合到哈希表中,它还确保了即使是暂时的,段也不会超过其限制。
Caffeine 不会对驱逐策略进行分段,也不会使用自定义哈希表。这允许它在触发驱逐之前达到全部容量,但确实意味着它将暂时超过最大值。哈希表和驱逐策略是解耦的,在哈希表上发生写入,然后通过writeBuffer
. 这是一个有界缓冲区,会立即耗尽,但如果它以某种方式被填充,则会对写入者产生背压,以允许驱逐跟上。因此,高速缓存在负载下可能会超过最大值,但不会出现失控增长。
迁移指南总结了需要注意的重要变化。
最大尺寸(或加权尺寸)
Guava 将在使用 LRU 算法达到最大大小之前驱逐。一旦使用 Window TinyLFU 算法超过阈值,咖啡因就会被驱逐。