The JVM stack is an abstraction. It can be placed anywhere or anywhere else. For instance. if the method is inline with JIT, it does not have a separate stack frame.
HotSpot JVM uses its own thread stack as a JVM stack. However, there are JVM implementations (such as CLDC HI) that allocate JVM stacks in the Java heap. The advantage of this approach is to have a single memory management for everything, including thread stacks. Such a JVM can run on a platform without a standard memory manager (for example, libc) or even without an OS.
JVM Heap is also an abstraction. This is no more "shared" between JVM threads than native thread threads. There may also be threaded areas in the heap. At the same time, sets of native threads are stored in virtual memory, which is also shared between all threads of the process.
source share