gpt4 book ai didi

java - WeakReference.get() 在没有强引用后可以返回非 null 吗?

转载 作者:行者123 更新时间:2023-12-02 02:47:31 25 4
gpt4 key购买 nike

在下面的代码片段中,widgetRef.get() 在技术上是否可以在对 的最后一个强可达引用之后返回一个非空值小部件消失了?

private class Foo {
private final WeakReference<Widget> widgetRef;

public Foo(WeakReference<Widget> widgetRef) {
this.widgetRef = widgetRef;
}

public bar() {
final Widget widget = widgetRef.get();
if (widget != null) {
widget.stuff();
}
}
}

换句话说,一旦对象变得弱可达,您是否可以依赖垃圾收集器立即处理所有弱/软/幻像引用?

我相信您不能依赖垃圾收集器来执行此操作,因为它可能随时运行(并且不会持续运行)。 WeakReference documentation意味着弱引用仅在垃圾收集器运行时处理:

Suppose that the garbage collector determines at a certain point in time that an object is weakly reachable. At that time it will atomically clear all weak references to that object and all weak references to any other weakly-reachable objects from which that object is reachable through a chain of strong and soft references.

是否有关于此行为的更明确的文档?

最佳答案

In the following snippet, is it technically possible for widgetRef,get() to return a non-null value after the last strong reachable reference to the Widget has disappeared?

这不仅在技术上可行,而且在实践中也很有可能发生。您应该为对象实现某种生命周期,使其在结束时进入分离/关闭状态。如果它只有一个所有者,那么该所有者应该对此负责。如果它有多个所有者,您可以使用计数器或所有者列表,本质上是实现引用计数。

垃圾收集器仅用于管理内存,而不是其他资源或应用程序级生命周期。

In other words, can you rely on the garbage collector immediately handling all weak/soft/phantom references as soon as an object becomes weakly reachable?

没有。

Is there some more explicit documentation about this behaviour?

您认为您引用的文档的哪一部分对于您的问题的目的来说不明确? “在某个时间点”的措辞可以理解为“不保证立即采取行动”。

关于java - WeakReference.get() 在没有强引用后可以返回非 null 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44363935/

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