In general both stack and heap
are part of memory, a program is allocated and used for different purposes.
Java program runs inside JVM which is launched as a process by "java" command.
Java also uses both stack and heap memory for different needs
1) Main difference between heap and stack is that stack memory is used to
store local
variables and function call, while heap memory is used to store objects
in Java. No matter, where object is created in code e.g. as member
variable, local variable or class variable, they are always created inside heap space in
Java.
2) Each Thread
in Java has there own stack which can be specified using -Xss JVM
parameter, similarly you can also specify heap size of Java program using JVM
option -Xms and -Xmx where -Xms is
starting size of heap and -Xmx is maximum size of java heap.
3) If there is no memory left in stack for storing function call or local
variable, JVM will throw java.lang.StackOverFlowError, while if there is no
more heap space for creating object, JVM will throw java.lang.OutOfMemoryError:
Java Heap Space.
4) If you are using Recursion,
on which method calls itself, You can quickly fill up stack memory. Another
difference between stack and heap is that size of stack memory is lot lesser
than size of heap memory in Java.
5) Variables stored in stacks are only visible to the owner Thread, while
objects created in heap are visible to all thread. In other words stack memory
is kind of private memory of Java Threads, while heap memory is shared among
all threads.
No comments:
Post a Comment