Xamarin垃圾收集器和循环引用

Lou*_*Lou 6 mono garbage-collection weak-references circular-reference xamarin

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

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

循环参考

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

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

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

与此同时,Xamarin关于垃圾收集的文档声称:

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

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

bwt*_*bwt 8

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

关于不朽对象的页面也:

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

第二个引言专门讨论了Xamarin.Android.