When you start a java application, with the parameters that are assigned to the java, the operating system will reserved some memory for java application known as heap. The heap further divided into several regions collectively known as eden, survivor spaces, old gen and perm gens. In oracle java8 hotspot, perm gen has been removed, be sure to always check official documention on garbage collector for changes. Below are a few links for hotspot implementation for java gc.
Survivor spaces are divided into two, survivor 0 and survivor 1. Both eden and survivor spaces collectively known as Young generation or new generation whilst old gen also known as tenured generation. Garbage collections will happened on young generation and old generations. Below are two diagrams show the heap regions are divided.
While the concept of Garbage Collection is the same, the implementation is not and neither are the default settings or how to tune it. The well known jvm includes the oracle sun hotspot, oracle jrockit and ibm j9. You can find the other jvm lists here. Essentially garbage collection will perform on young generation and old generation to remove object on heap that has no valid reference.
common java parameters settings. For full list, issue the command java -X
-Xms initial java heap size
-Xmx maximum java heap size
-Xmn the size of the heap for the young generation
There are a few type of GC
- serial gc
- parallel gc
- parallel old gc
- cms gc
- g1 gc
You can specify what gc implementation to run on the java heap region.
If you run a server application, the metric exposed by gc is definitely to watch out for. In order to get the metric, you can use
* jstat
That's it for this brief introduction.
This is nice article about Garbage Collection In Java .
ReplyDeletethanks