如果番石榴缓存已满并且没有可清除的元素,会发生什么情况?
答
基于引用的驱逐本质上与Java的标准GC行为没有区别 - GC只是忽略引用在缓存中的存在。如果一个对象超出范围(除缓存之外的任何地方),它将在GC期间从缓存中逐出。如果缓存中的所有元素都在其他地方的范围内,并且因此不能被GCed,则会遇到与如果不使用缓存时完全相同的内存问题。内存中的数据量不能超过JVM配置允许的数量。使用引用驱逐缓存不会改变这一点。
如果应用程序无法分配新对象,则JVM最终会抛出一个'OutOfMemoryError'。基于引用的缓存没有明确的容量限制,因此完整意味着没有可用的可用内存。 –
在Guava的缓存中没有“可驱逐”或“不可驱逐”之类的东西。缓存具有自动驱逐,或者它没有。如果不这样做,它将最终像OutOfMemoryError一样,就像Java中的其他数据结构一样。 –