Above shows JVM structure and how they are divided. Please see below details:
YoungGen : It is place where lived for short period and divided in two parts:
- Eden Space : When object created using new keyword memory allocated on this space.
- Survivor Space : This is the pool which contains objects which have survived after java garbage collection from Eden space.
Tenured Generation : This memory pool contains objects which survived after multiple garbage collection means object which survived after garbage collection from Survivor space.
- OldGen : This pool is basically contain tenured and virtual (reserved) space and will be holding those objects which survived after garbage collection from YoungGen space
Permanent Generation : This memory pool as name also says contain permanent class metadata and descriptors information so PermGen space always reserved for classes and those that is tied to the classes for example static members.
Code Cache (Virtual or reserved) : If you are using HotSpot Java VM this includes code cache area that containing memory which will be used for compilation and storage of native code.