javaobjectoopmemorystatic

Where static objects are stored in Java?


I'm reading a book "Thinking in Java" which says

objects are stored on heap and static variable are stored on some fixed location, saying it as static storage, so that they can be available for the entire time program when it is running.

class Myclass {    
  static int x =0; //stored on static storage
  Myclass obj = new Myclass(); //stored on heap    
}

Although making a object, static will not be a good idea as far as OOP is concerned. Putting this aside for a while, there comes my questions:

  1. Where does object, which is declared static, is stored.
  2. How does JVM instantiation of the object in this case.
class Myclass { 
  static Myclass obj = new Myclass(); //no man's land
}

Solution

  • All static content will be created on class load/initiation and stored in special location (most probably part of perm gen, differs based on implementation).

    For second example, When your Myclass is loaded, it's static content will be created/instantiated.

    This tutorial may give you high level overview.