A memory model is best thought of as the architecture that determines how different parts of memory (i.e., stack and heap) interact. The Java Virtual Machine (JVM) divides the memory into two logical units:
The thread stack is the part of the memory which stores the data specific to a thread. Every thread has its own thread stack. The thread stack stores local variables (both primitive and reference variables) of each method, whether the method belongs to an object or not.
When two separate threads call the same method, each thread creates its own copy of the local variables declared in the method; one thread cannot directly access the variables of another thread.
There is only one shared heap for the whole Java application; it stores the objects created and their member variables (both primitives and references). Any thread that has a reference to an object on the heap can access its member variables. Moreover, a single object on the heap can be referenced by the local variables of different threads.
Free Resources