弱引用是如何实现的?
2022-09-02 13:28:16
我想知道弱引用在内部是如何工作的,例如在.NET或Java中。我的两个一般想法是:
- “侵入性” - 将弱引用列表添加到最顶级的类(对象类)中。然后,当对象被销毁时,可以迭代所有弱引用并将其设置为 null。
- “非侵入式” - 维护对象指向弱引用列表的指针的哈希表。当创建对对象 B 的弱引用 A 时,哈希表中将有一个已修改或创建的条目,其键将是指向 B 的指针。
- “Dirty” - 为每个对象存储一个特殊的哈希值,当对象被销毁时,该哈希值将被清零。弱引用将复制该哈希值,并将其与对象的值进行比较,以检查对象是否处于活动状态。但是,当直接使用时,这会导致访问冲突错误,因此我认为需要一个具有该哈希值的附加对象。
这些解决方案中的任何一个似乎都很干净,也不高效。有谁知道它实际上是如何完成的吗?