在"Performance"部分阅读Xamarin文档时,我注意到以下章节:
下图说明了强引用可能出现的问题:
对象A具有对对象B的强引用,对象B具有对对象A的强引用。由于存在圆形强引用,这些对象称为不朽对象。这种父子关系并不罕见,因此,即使对象不再被应用程序使用,垃圾收集器也不会回收任何对象。
这是我第一次在C#/ .NET / Mono语境中听说过“不朽的对象”。
然后页面继续建议在其中一个对象中使用WeakReference
,这将删除强循环引用并修复此“问题”。
与此同时,Xamarin在garbage collection上的文档声称:
Xamarin.Android使用Mono的Simple Generational garbage collector。这是一个标记和清除垃圾收集器[...]
标记和扫描GC不受循环引用的影响吗?
答案 0 :(得分:8)
由于循环引用导致的内存泄漏仅适用于Xamarin.iOS,它使用对本机对象的引用计数。
关于不朽对象的页面也是says:
Boehm - 这是一个保守的非代际垃圾收集器。它 是Xamarin.iOS应用程序使用的默认垃圾收集器 使用Classic API。
第二句话特别谈到了Xamarin.Android。