Java 有人能解释强引用、软引用、弱引用和虚引用之间的区别及其用法吗?
我一直在试图理解不同参考文献之间的差异,但该理论并没有激发任何想法让我将其形象化 有人能简要解释一下不同的参考资料吗Java 有人能解释强引用、软引用、弱引用和虚引用之间的区别及其用法吗?,java,reference,Java,Reference,我一直在试图理解不同参考文献之间的差异,但该理论并没有激发任何想法让我将其形象化 有人能简要解释一下不同的参考资料吗 每一个例子都会更好。一篇解释这些参考类型的文章(包括例子):关于这个主题的另一篇好文章: ,有漂亮的图表 摘录: 正如您可能猜到的,向对象生命周期图添加三个新的可选状态会造成混乱。 尽管文档指出了从强可达到软、弱和幻影到回收的逻辑过程,但实际过程取决于程序创建的引用对象。 如果创建软引用,但不创建软引用,则对象将直接从强可达到弱可达到最终确定到收集。对象生命周期,带有参考对象
每一个例子都会更好。一篇解释这些参考类型的文章(包括例子):关于这个主题的另一篇好文章:
,有漂亮的图表 摘录: 正如您可能猜到的,向对象生命周期图添加三个新的可选状态会造成混乱。
尽管文档指出了从强可达到软、弱和幻影到回收的逻辑过程,但实际过程取决于程序创建的引用对象。
如果创建
软引用
,但不创建软引用
,则对象将直接从强可达到弱可达到最终确定到收集。对象生命周期,带有参考对象
记住,并非所有对象都附加到引用对象上,这一点也很重要-事实上,很少有对象应该是引用对象是一个间接层:您通过引用对象到达引用对象,显然您不希望在整个代码中使用该间接层。
事实上,大多数程序将使用引用对象访问程序创建的相对较少的对象 引用和引用 引用对象在程序代码和其他对象(称为referent)之间提供了一层间接层。
每个引用对象都围绕其引用对象构造,并提供一个get()方法来访问引用对象。创建引用后,不能更改其referent。收集引用对象后,get()方法返回null。应用程序代码、软/弱引用和引用之间的关系
还有更多的例子:
- 案例1:这是一个常规案例,其中对象被称为强可达
- 案例2:有两条到对象的路径,因此选择最强的路径,即具有强引用的路径,因此对象是强可访问的
- 案例3:同样有两条路径指向该对象,最强的一条是弱引用(因为另一条是幻影引用),因此该对象被称为弱可达
- 案例4:只有一条路径,最薄弱的环节是弱引用,因此对象是弱可达的
- 案例5:只有一条路径,最薄弱的环节是幻影引用,因此对象是幻影可及的
- 案例6:现在有两条路径,最强的路径是具有软引用的路径,因此现在称对象是软可到达的
有一个非常简单的规则:
- 强引用对象是标准的代码位,如
。只要引用(objecta=newobject()
,上面)是“可访问的”,那么被引用的对象就不是垃圾。因此,任何没有可到达的强引用的东西都可以被视为垃圾a
- 弱引用的对象可能会在符合GC条件时被JVM收集(并且
被清除)。对WeakReference
的弱引用看起来像A
。弱引用在需要缓存的情况下非常有用,因为只有在其他地方(例如HttpSessions)可以强访问密钥时,才需要缓存数据newweakreference(A)
- 软引用的对象可能会挂在JVM中,直到它完全需要恢复内存。软引用对于缓存非常有用,因为缓存中的值是长期存在的,但在必要时可以收集这些值
我从来都不太确定幻影 +1不只是提供URL:)之后,使用不同的gc模式:Java编程:References’包解释了我想要什么。现在我对参考文献有了一个清晰的概念。很高兴你喜欢这篇文章:-)在我的404中看到了链接report@kdgregory:谢谢你的更新:)这篇文章确实很棒。相关但范围较窄:链接断开。这就是为什么我们应该引用页面内容而不是提供链接的原因。