如果番石榴缓存已满并且没有可清除的元素,会发生什么情况?

问题描述:

我使用谷歌番石榴缓存与参考驱逐。 我想知道如果缓存已满并且没有元素被标记为可驱动会发生什么?是否有抛出的内存异常?如果番石榴缓存已满并且没有可清除的元素,会发生什么情况?

+0

如果应用程序无法分配新对象,则JVM最终会抛出一个'OutOfMemoryError'。基于引用的缓存没有明确的容量限制,因此完整意味着没有可用的可用内存。 –

+0

在Guava的缓存中没有“可驱逐”或“不可驱逐”之类的东西。缓存具有自动驱逐,或者它没有。如果不这样做,它将最终像OutOfMemoryError一样,就像Java中的其他数据结构一样。 –

基于引用的驱逐本质上与Java的标准GC行为没有区别 - GC只是忽略引用在缓存中的存在。如果一个对象超出范围(除缓存之外的任何地方),它将在GC期间从缓存中逐出。如果缓存中的所有元素都在其他地方的范围内,并且因此不能被GCed,则会遇到与如果不使用缓存时完全相同的内存问题。内存中的数据量不能超过JVM配置允许的数量。使用引用驱逐缓存不会改变这一点。