Runtime data areas shared among all threads:
Method area: holds the details of each class loaded by the class loader subsystem.
Heap: holds every object being created by the threads during execution
Thread specific runtime data areas:
Program counter register:
points to the next instruction to be executed.
hold the state of each method (java method, not a native method) invocations for the thread such as the local variables, method arguments, return values, intermediate results. Each entry in the Java stack is called “stack frames“. Whenever a method is invoked a new stack frame is added to the stack and corresponding frame is removed when its execution is completed.
Native method stack:
holds the state of each native method call in an implementation dependent way.