| |
|
What are Generations in Garbage Collector?
Generations in the Garbage Collector is a way of enhancing the garbage collection
performance. In .NET, all resources are allocated space (memory) from the heap.
Objects are automatically freed from the managed heap when they are no longer required
by the application.
When objects are no longer being used by the application, the .NET runtime's garbage
collector performs the task of collection, to determine the status of the objects.
Necessary operations are performed to relieve the memory, in case the object is no
longer in use. This is identified by the GC by examining the metadata of the object. For this,
the GC has to know the location of the roots that represent the object. Roots are actually
the location of the object on the managed heap. There are two types of memory references,
strong & weak. When a root references an object, it is said to be a strong
reference as the object is being pointed to by application code. The other type of object,
that is not being referenced by the application code is called the weak reference, and
this may be collected by the GC. However, this may still be accessed by the application
code if required. But for the application to access the weakly referenced object,
this has to be converted to a strong reference (and note that this has to be
done before the GC collects the weakly referenced object).
So what are Generations in the GC? Its a feature of the GC that enhances its performance.
There are 3 Generations...0,1,2.
Generation 0 - When an object is initialized, its in generation 0. These are new objects
that have never been played around with by the GC. As and when more objects get created, the process
of Garbage Collection is invoked by the CLR.
Generation 1 - The objects that survive the garbage collection process are considered to be in
generation 1. These are the old objects.
Generation 2 - As more new objects get created and added to the memory, the new objects are
added to generation 0, the generation 1 old objects become older, and so are considered to be in
generation 2. Generation 2 is the highest level generation in the garbage collection process.
Any further garbage collection process occuring causes the level 1 objects promoted to level 2, and
the level 2 objects stay in level 2 itself, as this generation level is the highest level.
So what is the importance & use of the generations process? Its actually the priority the GC
gives to objects while freeing objects from the heap. During every GC cycle, the objects in the Generation 0
are scanned first -> Followed by Generation 1 and then 2. This is because the generation 0 objects are
usually short term objects, that need to be freed. The newer an object, the shorter its life is.
The older an object, longer its life is.
This process also helps in categorizing the memory heap as to where the de-allocation needs to be
done first and where next.
.NET
Languages
Versions
Tools
CLI CTS Metadata CLS IL VES
CLR
Class Library
Managed Class
Assembly ILDASM
Reflection
Assembly Types
Strong Assembly
GAC
GC
IDisposable
Serialization
Code Access Security
Attribute
Thread
Globalization
Generations
COM
| |