Based on my previous post related to Java Memory Allocation – Heap and Stack let’s see the difference.
|Heap memory is used by all the parts of the application.
|Stack memory is used only by one thread of execution.
|Whenever an object is created, it’s 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.
|Objects stored in the heap are globally accessible.
|Stack memory can’t be accessed by other threads.
|We can use -Xms and -Xmx JVM option to define the startup size and maximum size of heap memory.
|We can use -Xss to define the stack memory size
|When Heap memory is full, it throws java.lang.OutOfMemoryError: Java Heap Space error
|When stack memory is full, Java runtime throws java.lang.StackOverFlowError