Java 是否在组中清除了对同一对象的多个弱引用?

Java 是否在组中清除了对同一对象的多个弱引用?,java,weak-references,Java,Weak References,如果有多个弱引用指向同一对象,但周围没有强引用。当其中一个返回对象时,我能确保两个弱引用都完好无损吗 WeakReference wr1 = new WeakReference(objX); ...//somewhere else WeakReference wr2 = new WeakReference(objX); 现在: 如果wr1.get()在某一时刻返回非null,那么wr2.get()也将返回非null 但是wr1和wr2对象本身是独立于gc的,它们的gs路径彼此独立,最重要的是独

如果有多个弱引用指向同一对象,但周围没有强引用。当其中一个返回对象时,我能确保两个弱引用都完好无损吗

WeakReference wr1 = new WeakReference(objX);
...//somewhere else
WeakReference wr2 = new WeakReference(objX);
现在:

  • 如果wr1.get()在某一时刻返回非null,那么wr2.get()也将返回非null
  • 但是wr1和wr2对象本身是独立于gc的,它们的gs路径彼此独立,最重要的是独立于objX

  • 它们将一起设置或清除。然而,如果你依赖这一事实,我会重新考虑你的设计,因为从一个指令到下一个指令,这可能会发生变化。@Peter_Lawrey我完全相信它们会一起被删除,尽管看起来似乎合乎逻辑。无论如何,依赖函数式代码将是一场噩梦。我主要是从理论的角度来问这个问题。我想知道在我的设计中对同一对象使用多个弱引用是否安全。我正在考虑使用任务对象,一旦任务完成,我就会删除所有强引用。但是,如果稍后检索到已完成的任务,我需要确保我的模型仍处于一致状态,以便跳过其他检查。使用指向同一objAt点2的多个weakrefs是安全的,而且实际上是常见的,您的意思是如果我将弱引用存储在弱引用中,那么它们本身就是?因为我不明白为什么wr1和wr2会被gc’ed,而我仍然可以访问它们。我的意思是wr1和wr2的gcing独立于objXYeah的gcing,我明白了。在处理弱引用时要记住的一点。这个答案没有提到JVM规范,也没有JVM的实现,也没有任何证据表明这是真的。