title: static allocation in java - heap, stack and permanent generation
body: <p>I have been lately reading a lot on memory allocation schemes in java, and there have been many doubts as I have been reading from various sources. I have collected my concepts, and I would request to go through all of the points and comment on them. I came to know that memory allocation is JVM specific, so I must say beforehand, that my question is Sun specific.</p>
  
  <ol>
  <li>Classes (loaded by the classloaders) go in a special area on heap : Permanent Generation</li>
  <li>All the information related to a class like name of the class, Object arrays associated with the class, internal objects used by JVM (like java/lang/Object) and optimization information goes into the Permanent Generation area.</li>
  <li>All the static member variables are kept on the Permanent Generation area again.</li>
  <li>Objects go on a different heap : Young generation</li>
  <li>There is only one copy of each method per class, be the method static or non-static. That copy is put in the Permanent Generation area.
  For non-static methods, all the parameters and local variables go onto the stack - and whenever there is a concrete invocation of that method, we get a new stack-frame associated with it.
  I am not sure where are the local variables of a static method are stored. Are they on the heap of Permanent Generation ? Or just their reference is stored in the Permanent Generation area, and the actual copy is somewhere else (Where ?)</li>
  <li>I am also unsure where does the return type of a method get stored.</li>
  <li>If the objects (in the young generation) needs to use a static member (in the permanent generation), they are given a reference to the static member &amp;&amp; they are given enough memory space to store the return type of the method,etc.</li>
  </ol>
  
  <p>Thank you for going through this !</p>