Garbage Collection uses an ephemeral garbage collector, which describes the lifetime of an object in generations. Using this system, the garbage collector makes the following logical assumptions:
Let’s look at a new heap. Once the heap is created and the first set of objects are instanced, they are created and set as Generation 0.
As a new set of objects is created, Garbage Collection checks to see which objects from Generation 0 still exist, those that do exist are compacted, moved above Generation 0, and become Generation 1 As the new Generation 0 enters the same process, so does Generation 1.
Any remaining members of Generation 1 become Generation 2, and those that survived Generation 0 become 1.
Then the new Generation 0 is created. At this point, the process continues, but there can be no higher generation than 2; any survivors from any subsequent Generation 1 members are placed in Generation 2 with the previous Generation 1 members that survived.This also means that a complete heap compacts portions at a time, thus increasing overall speed.
Objects within Generation 0 are checked more frequently than the other two generations due to .NET’s philosophy that new objects are more likely to be the first to be removed. In other words, the longer an object is alive, the more likely is to stay alive.