gpt4 book ai didi

java - Guava 最大缓存大小

转载 作者:行者123 更新时间:2023-12-01 09:22:16 24 4
gpt4 key购买 nike

我正在为我的应用程序使用 Guava 缓存,并且想知道如果未设置最大大小,默认行为是什么。我理解设置最大大小时的行为,如 https://github.com/google/guava/wiki/CachesExplained#size-based-eviction 中所述。 .

但是当未设置 MaximumSize 并且 JVM 耗尽堆空间时会发生什么?我假设垃圾收集器将运行并释放空间,这意味着条目将从缓存中删除?

最佳答案

在底层,Cache 只是一个奇特的Map,因此它具有类似的空间限制。与 Map 一样,它不能包含超过 Integer.MAX_VALUE 条目(因为这是 size() 的返回类型),因此您的理论值上限缓存大小约为 20 亿个元素。您可能还对 Guava 的 awesome element-cost analysis 感兴趣,其中详细说明了不同数据结构使用的确切字节数。

当然,在实践中,真正关心的通常不是缓存中的元素数量(其大小),而是缓存的对象消耗的内存量。。这与缓存的大小无关 - 单个缓存对象可能足够大,足以消耗所有堆。

默认情况下,Cache 在这种情况下不会执行任何特殊操作,并且 JVM 会崩溃。大多数时候这就是您想要的 - 默默地从缓存中删除元素可能会破坏程序的假设。

如果您确实想在内存不足的情况下删除条目,您可以use soft referencesCacheBuilder.softValues() 。当 JVM 面临耗尽可用堆空间的风险时,它将尝试对软引用进行垃圾收集。我鼓励您只使用此选项作为最后的手段 - JVM 必须做额外的工作来处理软引用,并且需要使用它们通常暗示您可以以不同的方式做其他事情。

关于java - Guava 最大缓存大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40098123/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com