I'm a novice Java developer and just getting my feet wet with memory management. Can someone explain heap vs stack and how these work?