我读了这篇文章,现在我清楚了弱引用和软引用之间的基本区别是什么。我也明白,与弱引用不同(如果没有对该对象的强引用,这将导致在下一个 GC 周期中收集该对象),软引用保留在内存中,直到 JVM 内存不足。
但我的问题是,如果 JVM 内存不足并且垃圾收集器也开始收集软引用,它应该在逻辑上收集所有带有软引用的现有对象(我的猜测)。我是对的吗?
我想到的另一件事是软引用有一个非常好的用例,即内存缓存。但如果我拥有的所有软引用都将被 GC 一次性清除,那么这可能不是我们一直想要的预期结果。
有没有办法控制将被清除的软引用的百分比?或者我们可以告诉 GC 在恢复了特定数量的内存后停止清除软引用吗?
我问这个是为了更好地掌握如何有效地使用软引用,显然没有人会希望他们的缓存完全从内存中清除,即使您需要非常少量的内存。