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
- Heap memory is used by all the parts of the application whereas stack memory is used only by one thread of execution.
- Stack memory size is very less when compared to Heap memory
- Stack memory is very fast when compared to heap memory
- 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.
- 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.
- 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
- Objects stored in the heap are globally accessible whereas stack memory can’t be accessed by other threads.
- Stack memory is short-lived whereas heap memory lives from the start till the end of application execution.