我想知道弱引用在内部如何工作,例如在.NET或Java中。我的两个基本想法是:

  • “侵入式”-向最顶层(对象类)添加弱引用列表。然后,在销毁对象时,可以迭代所有弱引用并将其设置为null。
  • “非侵入式”-维护对象指向弱引用列表的指针的哈希表。当创建对对象B的弱引用A时,哈希表中将有一个条目被修改或创建,其键将是指向B的指针。
  • “Dirty”-为每个对象存储一个特殊的哈希值,该值在对象被销毁时将被清零。弱引用将复制该哈希值,并将其与对象的值进行比较以检查对象是否存在。但是,如果直接使用它,则会导致访问冲突错误,因此,我认为需要具有该哈希值的其他对象。

  • 这些解决方案中的任何一个似乎都不干净也不有效。有谁知道它是如何实际完成的?

    最佳答案

    不确定我是否理解您的问题,但是您可以看一下WeakReference类及其在Java中的父类(super class)Reference的实现。它的注释很好,您可以看到它具有由GC专门处理的字段和由VM直接使用的另一个字段。

    关于java - 弱引用如何实现?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/780738/

    10-13 01:49