How does Java allocate stack and heap memory?
Object is always allocated in memory known as heap. If object is created in method (local) will also allocated in heap, but the pointing variable will be in stack.
Primitive variables are allocated in the stack (if they are local method variables) and in the heap (if they are member variables i.e. fields of a class).
In Java methods local variables are pushed into stack when a method is invoked and stack pointer is decremented when a method call is completed.
In a multi-threaded application each thread will have its own stack but will share the same heap.