gpt4 book ai didi

java - 如何在 Java 中实现将某些引用显式标记为 "unneeded"?

转载 作者:行者123 更新时间:2023-11-29 07:00:19 24 4
gpt4 key购买 nike

在我看来,我发现了一种情况,标准垃圾收集算法不能很好地使用。

假设我有一些对象 A,它在构建时将自己添加为来自对象 B 的事件的事件监听器。由于对象具有将自身添加为监听器所需的所有数据,因此它也具有将自身从监听器中删除的数据。

不幸的是,GC 无法启动删除过程,因为在明确删除之前,对象将在监听器列表中被引用。

因此,这意味着任何一个对象都不应该将自己添加为监听器,或者应该有一种方法可以将某些引用标记为不重要。在后一种情况下,即使存在对对象的一些引用,GC 也会启动垃圾回收——如果它们只是“不重要”的情况。

显然,程序员应该有义务清除某些方法中所有不重要的引用,例如disposefinalize

我知道这种直接实现会造成安全隐患。例如,如果程序员违反处置契约(Contract),垃圾收集将提供不正确的引用。

所以,问题是:是否有一些库或模式来实现这种关系?

最佳答案

如果您只是希望将对象生命周期管理为对它的引用而不是作为监听器,那么您可以将监听器集合更改为“弱”集合,如 WeakHashMap .这样的集合使用 Weak References以避免在清除所有其他引用后让对象保持 Activity 状态。

关于java - 如何在 Java 中实现将某些引用显式标记为 "unneeded"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27233329/

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