Java 番石榴最大缓存大小

Java 番石榴最大缓存大小,java,heap,google-guava-cache,Java,Heap,Google Guava Cache,我正在为我的应用程序使用Guava缓存,我想知道如果没有设置maximumSize,默认行为是什么。我理解设置最大大小时的行为,如中所述 但是,如果没有设置maximumSize,JVM的堆空间用完了,会发生什么呢?我假设垃圾收集器将运行并释放空间,这意味着条目将从缓存中删除 在封面下,一个缓存只是一个奇特的地图,因此它也有类似的空间限制。与Map一样,它不能包含超过Integer.MAX\u VALUE项(因为这是size()的返回类型),因此理论上的上限缓存大小约为20亿个元素。您可能还对G

我正在为我的应用程序使用Guava缓存,我想知道如果没有设置maximumSize,默认行为是什么。我理解设置最大大小时的行为,如中所述


但是,如果没有设置maximumSize,JVM的堆空间用完了,会发生什么呢?我假设垃圾收集器将运行并释放空间,这意味着条目将从缓存中删除

在封面下,一个
缓存
只是一个奇特的
地图
,因此它也有类似的空间限制。与
Map
一样,它不能包含超过
Integer.MAX\u VALUE
项(因为这是
size()
的返回类型),因此理论上的上限缓存大小约为20亿个元素。您可能还对Guava's感兴趣,它详细说明了不同数据结构使用的确切字节数

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

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


如果您确实想在接近内存不足状态时删除条目,可以使用。当JVM有耗尽可用堆空间的风险时,它将尝试对软引用进行垃圾收集。我鼓励您仅将此选项作为最后手段使用-JVM必须做额外的工作来处理软引用,而需要使用它们往往暗示您可能正在以不同的方式做其他事情。

有人对此有什么想法吗?