¿La metodología de recolección de basura de CLR significa que es seguro lanzar referencias de objetos circulares?

Tengo una teoría de que el mecanismo de recolección de basura CLR significa que puedo salirme con referencias circulares en mi jerarquía de objetos sin crear puntos muertos para el desassembly y la recolección de basura. ¿Es esta una suposición segura de hacer? (Idioma de destino VB.NET)

El recolector de basura .NET es una marca generacional y un recolector de barrido. No utiliza el recuento de referencias. Así que sí, es seguro tener referencias circulares. El lenguaje es irrelevante

Según este artículo: https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-5109829.html

La referencia circular es un problema que ocurre cuando hay dos objetos que se refieren entre sí. Digamos que tiene Clase A que se refiere a Clase B. Si Clase B también se refiere a Clase A, entonces tenemos una referencia circular. Esto sucede en muchas situaciones. Un ejemplo típico de esto es una relación padre-hijo entre objetos, donde el hijo interactúa con el objeto padre y también contiene una referencia al objeto padre. Esto podría llevar a objetos que no se limpiarían hasta que la aplicación se cerrara. La forma de recolección de basura .NET resuelve el problema de la referencia circular porque el recolector de basura puede limpiar cualquier objeto que sea accesible desde la raíz.

EDITAR:
A juzgar por este post: http://blogs.msdn.com/abhinaba/archive/2009/01/27/back-to-basics-reference-counting-garbage-collection.aspx parece que la recolección de basura de .Net no está basada En el recuento de referencias para la recolección de basura.

Otro artículo que vale la pena leer (explica en detalle la recolección de basura) es este: http://www.simple-talk.com/dotnet/.net-framework/understanding-garbage-collection-in-.net/