Java Heap Memory
Heap memory is used by java runtime to allocate memory to
Objects and JRE classes. Whenever we create any object, it’s always created in
the Heap space.
Garbage Collection runs on the heap memory to free the memory
used by objects that doesn’t have any reference. Any object created in the heap
space has global access and can be referenced from anywhere of the application.
Java Stack Memory
Java Stack memory is used for execution of a thread. They
contain method specific values that are short-lived and references to other
objects in the heap that are getting referred from the method.
Stack memory is always referenced in LIFO (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. As soon as method ends, the block becomes unused and become
available for next method.
Difference between
Heap and Stack Memory
Heap memory
|
Stack memory
|
Heap
memory is used by all the parts of the application.
|
whereas
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.
|
Heap
memory is more complex because it’s used globally and Heap memory is divided into Young-Generation, Old-Generation etc.
|
Memory
management in stack is done in LIFO manner.
|
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.
|
If heap
memory is full, it throws java.lang.OutOfMemoryError:
Java Heap Space error.
|
When
stack memory is full, Java runtime throws
java.lang.StackOverFlowError.
|
|
Because
of simplicity in memory allocation (LIFO), stack memory is very fast when
compared to heap memory.
|
Heap
memory lives from the start till the end of application execution.
|
Stack
memory is short-lived.
|
Stack
memory size is very less when compared to Heap memory.
|
|
No comments:
Post a Comment