I wanted to see how garbage collections work. but all i can find was theory and theory. Thus thought to try it out with a very basic program to see it practically.
Some basic information that one should know.
1 Eden Space : All the new objects that are created goes to this part of heap
2 Survivor Spaces (S0/S1) : After minor GC reachable object from the Eden space and from one part (S0/S1) of the survivor space is transferred to another part of survivor space (S0/S1). And with this the age of each surviving object is incremented.
3 Old Generation Space : An object can reach here by two ways. One if the max age of the object is reached other when there is memory overflow in survivor space memory.
You might understand better reading these articles, I also studied this stuff from here
Understanding the Java Memory Model and Garbage Collection - DZone Java
Are you cavalier with your data allocations? Don't worry, Java has a built-in recycling plant. It has strange places…
So now i tried to make it practical and created this basic java program.
Now to visualize the memory spaces there are many tools but i used Visual VM https://visualvm.github.io/download.html
So basically this program keeps creating objects and keeps filling the eden/survivor/tenured spaces.
I was just focussing on filling these memory spaces and according to my knowledge , these A class objects are not eligible for garbage collection at any point of time.
So running this program normally wont give you much visual information as the memory of these object is very low thus we need to set the maximum heap size to a very low value explicitly. Small as 2MB.
so we need to run the program as simply as this
java -Xmx2m Test
When you run visual VM with this it would look like.
I would continue to run more scenarios of garbage collection, and will share soon.