Java中的软引用的用例是什么?

ben*_*rre 14 java jvm soft-references

Java中的软引用的用例是什么?当JVM内存不足以释放足够的资源以便在关闭JVM之前转储关键信息时,垃圾收集非关键项是否有用?

它们被称为软引用它们是软的并且在"处于压力之下"时断开,即:JVM已经耗尽内存.我理解弱引用和幻像引用,但实际上并不需要这些引用.

Pau*_*ane 20

一个用途是用于缓存.想象一下,您希望维护大型对象的内存缓存,但您不希望该缓存占用可用于其他目的的内存(因为缓存总是可以重建).通过维护对象的软引用缓存,JVM可以释放引用的对象,并且它们占用的内存可以重用于其他目的.缓存只需要在遇到它们时清除损坏的软引用.

另一种用途可以是将应用程序图像保持在诸如移动电话的存储器受限设备上.当用户打开应用程序时,可以将先前的应用程序映像维护为软引用,以便在需要其他内容的情况下将其清除,但如果不需要内存则仍然存在.如果内存没有压力,这将允许用户更快地返回应用程序,并且如果其他内容需要,则允许回收先前应用程序的内存.


Bal*_*usC 16

这篇文章让我对它们的每一个都有了很好的理解(弱,软和幻像参考).这是一个总结的引用:

一个弱引用,简单地说,是不是强大到足以迫使对象保留在内存中的参考.弱引用允许您利用垃圾收集器为您确定可达性的能力,因此您不必自己执行此操作.

软参考酷似弱引用,不同之处在于它是更少急于扔掉其所引用的对象.一个只能弱到达的对象(对它的最强引用WeakReferences)将在下一个垃圾收集周期被丢弃,但是一个可以轻柔到达的对象通常会停留一段时间.

幻象参考比任一完全不同的SoftReferenceWeakReference.它对物体的抓握是如此脆弱,甚至无法检索物体 - 它的get()方法总是返回null.这种引用的唯一用途是跟踪它何时被排入a ReferenceQueue,因为此时你知道它指向的对象已经死了.