Skip to main content

Jave Memory Models (JMM):

What is the Java Memory Model?

The Java memory model specifies how the Java virtual machine works with the computer's memory (RAM). The Java virtual machine is a whole computer model, so it naturally includes a memory model - AKA the Java memory model.


It is vital to understand the Java memory model if you want to design correctly behaving concurrent programs. The Java memory model specifies how and when different threads can see values written to shared variables by other threads and how to synchronise access to shared variables when necessary.


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:

  • Thread stack
  • Heap

Thread stack

The thread stack is the part of the memory that 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 copy of the local variables declared in the method. Therefore, one thread cannot directly access the variables of another thread.

Heap

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.

Popular posts from this blog

What happens if we don't override the run() method:

Consequences of not overriding the run() method: If we don’t override the run() method, the compiler will not flash any error, and it will execute the run() method of the Thread class that has been emptily implemented, So, there will be no output for this Thread. Below is an example of the method returning no output: public class Example extends Thread { public static void main(String[] args) { Thread thread = new Thread( new Example()); thread.start(); // will create a new thread and call thread class's run() method which has no implementation. } }

Creating and Running a Java Thread:

Ways to create a Thread: You can create a Thread in two ways: By extending the Thread class. By implementing a Runnable Interface. Thread class: The Thread class provides constructors and methods to create and perform operations on a thread. Runnable Interface: Runnable Interfaces have only one method,  named run() . The Runnable Interface should be performed by classes where their instances plan to be executed by a thread.  public void run() : is used to perform the action for a Thread. Starting a thread: The  start() method  of a Thread class is used to start a newly created thread. It performs the following tasks: A new thread starts(with their stack). The Thread moves to the Runnable state from New state. The  run() method  will run when the Thread gets a chance. Java Thread Example by extending Thread class: class  Multi  extends  Thread{   public   void  run(){   System.out.println( "Extended Thread Class E...

Interfaces - Need to know:

What is an Interface? An Interface is like a class in that it can have methods and variables. However, methods declared in an Interface are abstract by default, meaning they only contain the method signature, not the method body. Facts about Interfaces: Interfaces specify what the class must do and not how the class must do it. They are considered as the class blueprint. If a class implements an interface, the class must provide all the method bodies for the interface's functions. Otherwise, the class must be declared abstract. They are used to achieve total abstraction. An Interface can extend one or many Interfaces. A class can extend many Interfaces, but only one class. Nested Interfaces is when an Interface is declared inside another interface. It is also used to achieve loose coupling. Interfaces are used to implement abstraction.  Difference between Abstract Class and Interface: Differences between an Abstract class and an Interface include: An interface can have strictly abs...