在本文中:Xamarin - Use Weak References to Prevent Immortal Objects 它表示如果两个对象强相互引用,它们将变为imortal,这意味着GC无法收集它们,即使应用程序不再使用这些对象。
然而,在这两个SO讨论中:
Garbage collector and circular reference
Circular References Cause Memory Leak?
似乎循环引用可以由GC处理,只要应用程序不再使用这些对象。
我是否误解了什么? Java的GC在Android上的表现有所不同吗?我真的很困惑。 任何评论都是适用的。谢谢!
答案 0 :(得分:2)
我不确定你的问题是什么语言或环境,但在Java中,没有"不朽的对象"你描述的那种Java垃圾收集不基于引用计数:它基于来自根的可达性。由于您的两个对象未被应用程序中的任何其他对象引用,因此它们符合垃圾回收条件。
答案 1 :(得分:2)
Xamarin is based on Mono,它本质上是(现在)独立的.NET实现。和.NET一样,它将垃圾收集基于可达性,而不是引用计数或存在。 (对于Java GC系统也是如此,但由于Xamarin不是基于Java,因此并不是真的。)
两个相互引用但在程序中无法访问的对象可以进行垃圾回收。没有必要使用弱引用来解决该场景,因为一旦" root"无法访问两个对象,就会收集对象。参考
换句话说,您正在查看的文章明显不正确。实际上,使用弱引用可能会导致其他问题,因为保持对象的活动变得更加复杂,从而更容易将错误编写到代码中。令我惊讶的是,这些错误的信息会出现在Xamarin网站上。
答案 2 :(得分:-1)
我做了一些研究,想回答我自己的问题。以下是一些调查结果:
我认为是这样的。链接有关此主题的一些参考文献: