title: Why can't the garbage collector figure out when objects referencing eachother are really orphaned
body: <p>I understand that in a managed language like Java or C# there is this thing called a garbage collector that every once in a while checks to see if there are any object instances that are no longer referenced, and thus are completely orphaned, and clears then out of memory. But if two objects are not referenced by any variable in a program, but reference each other (like an event subscription), the garbage collector will see this reference and not clear the objects from memory. </p>
  
  <p>Why is this? Why can't the garbage collector figure out that neither of the objects can be reference by any active part of the running program and dispose them.</p>