Xamarin垃圾收集器和循环引用

时间:2016-02-18 20:22:35

标签: xamarin mono garbage-collection weak-references circular-reference

"Performance"部分阅读Xamarin文档时,我注意到以下章节:

  

下图说明了强引用可能出现的问题:

     

Circular reference

     

对象A具有对对象B的强引用,对象B具有对对象A的强引用。由于存在圆形强引用,这些对象称为不朽对象。这种父子关系并不罕见,因此,即使对象不再被应用程序使用,垃圾收集器也不会回收任何对象。

这是我第一次在C#/ .NET / Mono语境中听说过“不朽的对象”。

然后页面继续建议在其中一个对象中使用WeakReference,这将删除强循环引用并修复此“问题”。

与此同时,Xamarin在garbage collection上的文档声称:

  

Xamarin.Android使用Mono的Simple Generational garbage collector。这是一个标记和清除垃圾收集器[...]

标记和扫描GC不受循环引用的影响吗?

1 个答案:

答案 0 :(得分:8)

由于循环引用导致的内存泄漏仅适用于Xamarin.iOS,它使用对本机对象的引用计数。

关于不朽对象的页面也是says

  

Boehm - 这是一个保守的非代际垃圾收集器。它   是Xamarin.iOS应用程序使用的默认垃圾收集器   使用Classic API。

第二句话特别谈到了Xamarin.Android。