Tuesday 27 May 2014

Java (Java Virtual Memory) Memory Types

JVM memory area related jargons are key to understand the JVM on the whole. In this article let us discuss about the important memory areas in JVM.


Memory Types :

Heap Memory:
     
Class instances and arrays are stored in heap memory. Heap memory is also called as shared memory.
As this is the place where multiple threads will share the same data.

Non-heap Memory:
   
   It comprises of ‘Method Area’ and other memory required for internal processing. So here the major
player is ‘Method Area’.


Method Area:
     
As given in the last line, method area is part of non-heap memory. It stores per-class structures, code
for methods and constructors. Per-class structure means runtime constants and static fields.

Memory Pool:

       Memory pools are created by JVM memory managers during runtime. Memory pool may belong to
either heap or non-heap memory.

Runtime Constant Pool:
         A run time constant pool is a per-class or per-interface run time representation of the constant_pool
table in a class file. Each runtime constant pool is allocated from the Java 
virtual machine’s method area.

                          

Java Stacks or Frames:
       Java stacks are created private to a thread. Every thread will have a program counter (PC) and a java
stack. PC will use the java stack to store the intermediate values, dynamic linking, return values for
methods
and dispatch exceptions. This is used in the place of registers.

Memory Generations

          HotSpot VM’s garbage collector uses generational garbage collection. It separates the JVM’s memory
into and they are called young generation and old generation.

Young Generation
         Young generation memory consists of two parts, Eden space and survivor space. Shortlived objects
will be available in Eden space. Every object starts its life from Eden space. When GC happens, if an object
is still alive and it will be moved to survivor space and other dereferenced objects will be removed.

Old Generation – Tenured and PermGen
         Old generation memory has two parts, tenured generation and permanent generation (PermGen).
PermGen is a popular term. We used to error like PermGen space not sufficient.

          GC moves live objects from survivor space to tenured generation. The permanent generation
contains meta data of the virtual machine, class and method objects.

Discussion:
         Java specification doesn’t give hard and fast rules about the design of JVM heap data area. So it is left
 to
the JVM implementers and they can decide on things like whether to allocate fixed memory size or
dynamic.

Key Takeaways
  • Local Variables are stored in Frames during runtime.
  • Static Variables are stored in Method Area.
  • Arrays are stored in heap memory.

No comments:

Post a Comment