Memory leaks, in the classic sense, don't (shouldn't, rather) occur in
Java, since you have no direct way to allocate and (forget to) deallocate memory. There are ways (as always) you can get close though, see
Dobb's.
To understand stacks, insofar as they apply to Java, refer to
Chapter 3 of the VM Specificaion.
You may also want to pick up a good general science book on compilers or spend some time with a good C/++ book. At the end of the day, it's all the same, just different faces.