Monday 22 February 2016

Difference between Heap and Stack Memory

Java Heap Memory

Heap memory is used by java run time to allocate memory to Objects. While try to create an object, it’s always created in the Heap space. If the objects doesn't have any reference, Garbage Collection runs on the heap memory to free the memory used by objects.

Java Stack Memory

Stack memory size is very less compared to Heap memory. It is used for execution of a thread. Stack memory is always referenced in Last-In-First-Out order. Whenever a method is invoked, a new block is created in the stack memory for the method to hold local primitive values and reference to other objects in the method. When the method ends, the block becomes unused and become available for next method.

Difference between Heap and Stack Memory

  1. Heap memory is used by all the parts of the application whereas stack memory is used only by one thread of execution.
  2. Stack memory size is very less when compared to Heap memory
  3. Stack memory is very fast when compared to heap memory
  4. When stack memory is full, Java run time throws java.lang.StackOverFlowError whereas if heap memory is full, it throws java.lang.OutOfMemoryError: Java Heap Space error.
  5. Object is always stored in the Heap space and stack memory contains the reference to it. Stack memory only contains local primitive variables and reference variables to objects in heap space.
  6. We can use -Xss to define the stack memory size.We can use -Xms and -Xmx JVM option to define the startup size and maximum size of heap memory
  7. Objects stored in the heap are globally accessible whereas stack memory can’t be accessed by other threads.
  8. Stack memory is short-lived whereas heap memory lives from the start till the end of application execution.

12 comments:

  1. What is the largest possible heap size with a 64-bit JVM?

    ReplyDelete
    Replies
    1. The size is likely to be limited by your OS. If you want to use 32-bit references, your heap is limited to 32 GB. With a 64-bit JVM, the latest versions have -XX:+UseCompressedOops on by default. it is using 32-bit compressed references to objects. Since objects are 8-byte aligned, it can reference 2^32 * 8 bytes or 32 GB!.

      Delete