Qus: What is garbage collection and explain its different generations?
A generational garbage collector collects the short-lived objects more frequently than the longer lived ones. Short-lived objects are stored in the first generation, generation 0. The longer-lived objects are pushed into the higher generations, 1 or 2.
Garbage collector gives number of benefits like -
Automatic Memory Management - You can build your application without thinking about how to free the memory as Garbage Collector gets called automatically by CLR.
Garbage Collector does proficient memory management for your objects.
Garbage Collector does automatic reclaim of the memory for those objects which are not in use and which are marked for deletion.
Garbage collector allocates the memory for objects in such a way that one object will not be able to use other object data accidently.
The Managed Heap is a memory area where a series of managed objects are stored and managed. As shown in the above diagram, the managed heap gets divided into three different sections which are known as Generations.
Generation 0 - This is the first generation under managed heap which is used to store and manage short-lived objects. All small size objects usually get allocated on Generation 0. When garbage collector reclaims the memory, it always reclaims the memory from generation 0 by default. The objects which are survived in Generation 0 will be pushed towards the generation 1.
Generation 1 - This generation again contain the short-lived objects and the objects which are survived from Generation 0. The objects which are survived in Generation 1 will be pushed towards the generation 2.
Generation 2 - This generation contains the long lived objects which are survived from multiple generations and are used till the process is running.
Garbage Collector first looks for the free memory in generation 0 which can be used to allocate the memory for the new object. The objects are always created in contagious memory. If the garbage collector finds sufficient memory for the new object, it does not search for the dead object and hence memory allocation process is always faster. But in case, sufficient memory is not available; then garbage collector reclaims the memory of the objects which are dead or not getting used for a long time.
When Garbage collector gets executed, it first of all, finds all the live objects. After this garbage collector updates the addresses of objects which will be compacted. Then it reclaims the memory of all the dead objects. Once the memory is reclaimed, it moves the lived objects to the next Generation. For example, the objects which live through in Generation 0 will be moved towards Generation 1. The objects which survived in generation 1 will be moved towards Generation 2. The objects which survived in Generation 2 will stay in Generation 2 only.