This section describes the generational garbage collection architecture used in the HotSpot JVM. Young Generation stores objects with shorter lives and Tenured Generation stores objects with longer lives.
Earlier we learned the garbage collector's role and responsibilities.
Now let's look at a real example, the garbage collector implemented in the HotSpot JVM.
Architecturally, the HotSpot garbage collector is called Generational Collector,
which divides the memory into two parts (generations):
Young (New) Generation - Stores objects that have shorter lives with less memory space.
Garbage collections occur more frequently in Young Generation.
The operation of garbage collection in the Young Generation is referred as Minor GC.
Faster and less space efficient garbage collection algorithms can be chosen for Minor GC.
Tenured (Old) Generation - Stores objects that have longer lives with more memory space.
Garbage collections occur less frequently in Tenured Generation.
The operation of garbage collection in the Tenured Generation is referred as Major GC.
More space efficient and slower garbage collection algorithms can be chosen for Major GC.
A new objects is normally allocated in the Young Generation first.
If it survives some number of Minor GC, it will be then promoted to the Tenured Generation.
The generational garbage collection approach is more efficient because
of the following weak generational hypothesis observed in most Java applications:
Most objects have shorter lives.
Less older objects referencing younger objects than younger objects referencing older objects.
The picture below illustrates the generational garbage collection architecture used in HotSpot JVM: