How are Java objects stored in memory?

In Java, all objects are dynamically allocated on Heap. This is different from C++ where objects can be allocated memory either on Stack or on Heap. In C++, when we allocate the object using new(), the object is allocated on Heap, otherwise on Stack if not global or static.

In Java, when we only declare a variable of a class type, only a reference is created (memory is not allocated for the object). To allocate memory to an object, we must use new(). So the object is always allocated memory on heap (See this for more details).

For example, following program fails in the compilation. Compiler gives error “Error here because t is not initialized”.

filter_none

edit
close

play_arrow

link
brightness_4
code

class Test {
  
// class contents
void show()
{
    System.out.println("Test::show() called");
}
}
  
public class Main {
  
        // Driver Code
    public static void main(String[] args) 
    {
        Test t; 
          
        // Error here because t 
        // is not initialzed
        t.show(); 
    }
}

chevron_right


Allocating memory using new() makes above program work.

filter_none

edit
close

play_arrow

link
brightness_4
code

class Test {
      
// class contents
void show() 
{
    System.out.println("Test::show() called");
}
}
  
public class Main {
      
    // Driver Code
    public static void main(String[] args)
    {
          
        // all objects are dynamically 
        // allocated
        Test t = new Test(); 
        t.show(); // No error 
    }
}

chevron_right


Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



My Personal Notes arrow_drop_up



Article Tags :
Practice Tags :


20


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.