as per
polya, if you draw a picture, it becomes clearer.
at this point, you have three references (e1, e2 and e3), each pointing to a unique object in the heap.
e1.e = e3;
e2 = null;
e3 = null;
e2.e = el;
e1 = null;
so at this point, e1, e2, and e3 all point to nothing. obj1 has a reference to obj3. that has a reference to obj2, which has a reference to obj1. Every object is referred to by SOMETHING, so they're not eligible for GC... However, you have no way to GET to them. They're all alone, each referring to each other in a little island in the heap. They're isolated from the rest of the code/references. Therefore, since you can't GET to them, even though they all HAVE a reference, they CAN be GC'd.