除了强引用之外,还有三种不同的“引用类型”:WeakReference,SoftReference和PhantomReference。可能还有其他类型,但它们要么扩展其中一种类型,要么与我的问题无关。
如果一个对象在GC周期中没有被强引用,它将被垃圾回收(即完成最后处理并从内存中删除)。但在它被收集之前,任何*Reference都会被清除 - 根据可达性条件、需要清除的引用类型、内存需求等等。
我想知道JLS是否对所有相同类型的*Reference指向同一对象的引用在原子/同时被清除做出任何保证,或者是否存在微小的机会(即“竞争条件”),某些*Reference被清除而同一类型的其他*Reference则没有被清除,因此对象有可能通过剩余的*Reference之一重新获得强引用,尽管同一类型的某些*Reference已经被清除和排队。
从不同的角度重述问题:可以安全地假设清除的*Reference意味着以前引用的对象不能通过同一类型的其他*Reference重新获得强引用吗?
如果一个对象在GC周期中没有被强引用,它将被垃圾回收(即完成最后处理并从内存中删除)。但在它被收集之前,任何*Reference都会被清除 - 根据可达性条件、需要清除的引用类型、内存需求等等。
我想知道JLS是否对所有相同类型的*Reference指向同一对象的引用在原子/同时被清除做出任何保证,或者是否存在微小的机会(即“竞争条件”),某些*Reference被清除而同一类型的其他*Reference则没有被清除,因此对象有可能通过剩余的*Reference之一重新获得强引用,尽管同一类型的某些*Reference已经被清除和排队。
从不同的角度重述问题:可以安全地假设清除的*Reference意味着以前引用的对象不能通过同一类型的其他*Reference重新获得强引用吗?