Runtime Data Areas

= Runtime data areas = Are divided into diferent types:
 * JVM Stack: Everytime a thread is started it's created one area only for this thread where the stack frame will be stored.
 * PC Register: Every thread has it own Program Counter (PC) where the address of a JVM instruction executed is stored.
 * Native method stack: Is the stack used for all codes invoked through JNI.
 * Stack Frame: Everytime a methos is executed the JVM creates a stack frame where it has the reference for a local variable array. When it's ended it's removed.
 * Local variable array: The first item is the reference of a class instance and the rest of the elements of the array from 1 index will be the parameters of the method and the local variables in this order.
 * Operand stack: The place where each method share data with the Operand stack area and the local variable array area.
 * Method area: Every class or interface loaded stores here the runtime constant pool, method and fields, static variables. Anyways every JVM vendor use their own implementation but Oracle Hotspot for example calls it PermGen.
 * Runtime constant pool: It stores all references for methods and fields.
 * Heap: Where all instances and objects are stored. The Garbage_collector work in this area permanently so it's very important to configure it properly for a better performance.

The first 3 areas are created for every thread while the rest of them are shared by all threads.