A stack is a "last in first out" structure. So you just get to push and pop it. Efficient but limited.
A heap is a random access storage mechanism. So you need to track references to where your stuff is on the heap. In
java those are kept in fields and variables.
In the JVM, you don't get a whole lot of choice. Your objects WILL be on the heap, your local variables will be in the stack relating to the "frame" associated with the method.
Of course you can create custom Stacks for other uses.