an area of memory used for dynamic allocation.
memory that is not manage automatically
if fail to dealocate memory, you will end up with memory leak
does not have size restrictions on variable size
the stack is where memory is allocated for automatic variables within functions
"LIFO" (last in first out) data structure
memory is managed automatically
there is a limit on the size of variables
stack overflow occurs if call stack pointer exceeds stack boundary
Memory space for objects is always allocated in heap.
Built-in datatypes like int, double, float and parameters to methods are allocated on the stack.
Even though objects are held on heap, references to them are also variables and they are placed on stack.
When you create an object using the new operator,
myobj = new Object();
it allocates memory for the myobj object on the heap.
When you do a string initialization,
String myString;
it is a reference to an object so it will be created using new and hence it will be placed on the heap.
If you create an object inside a function without using the “new” operator then this will create and store the object on the stack, and not on the heap.
The stack memory space is used when you declare automatic variables.
if you need to allocate a large block of memory
if you need to keep the variable around a long time
if you need variables like arrays and structs that can change size dynamically
if you are dealing with realtively small variables that only need to persist as long as the function using them is alive
No. | Heap | Stack |
---|---|---|
1. | manually deleted by programmer | automatically deallocate |
2. | no limit on memory size | limit on stack size |
3. | slower access | fast access |
4. | global variable | local variable only |
5. | memory leak | stack overflow |
6. | initialized at runtime | initialized before runtime |
7. | live from start to the end of application | short-lived |