four objects are created - two Alphas, and two Betas.
a2 points to one of the Alpha objects. That object's b2 reference points to one of the Beta objects, and the Alpha.b1 static reference points to the other Beta object. So, of the four, three still have live references.
There are only two hard things in computer science: cache invalidation, naming things, and off-by-one errors
I’ve looked at a lot of different solutions, and in my humble opinion Aspose is the way to go. Here’s the link: http://aspose.com