gpt4 book ai didi

java - WeakReference 对象是否也与引用对象一起被垃圾收集?

转载 作者:行者123 更新时间:2023-11-30 02:15:51 26 4
gpt4 key购买 nike

考虑下一个 fragment :

private void foo() {
A a = new A();
WeakReference<A> weakA = new WeakReference<A>(a);
a = null;

while (true) {
if (weakA.get() != null)
System.out.println("weakA.get() != null !!!");
else
System.out.println("weakA.get() == null");
}
}

'if' 语句还必须包含对 'weakA' 对象(WeakReference 对象)的空值检查吗?像这样:

if (weakA != null && weakA.get() != null)

或者在这种情况下只是一个多余的检查?我问这个是因为我看过很多检查 WeakReference 是否不为 null 的代码和教程,我不确定是否是因为当持有的引用对象被 GC 时,VM 会删除 WeakReference 本身。

提前致谢。

编辑:

您可以在本教程中查看此模式的空检查示例: http://android-developers.blogspot.com.ar/2010/07/multithreading-for-performance.html

但我也在 Multithreading For Performance 中找到了它.在这种情况下,它会在 AsyncTask.onPostExecute() 方法中检查 WeakReference 是否为 null,但它不会明确地为 WeakReference 对象赋值,所以我猜检查 WeakReference 本身是否为 null 是多余的。

最佳答案

不,weakA 本身不能为 null,只要您仍然持有对它的引用。它只是可以收集的对象。

您可以发布您提到的代码示例吗?

关于java - WeakReference 对象是否也与引用对象一起被垃圾收集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29353246/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com