I tend to get these questions asked by a lot by students, or by co-workers looking for a resource, so I wanted a more definite reference for them. Might as well share it with the community.
How is the Java Memory Model represented and what are its characteristics?
How does Garbage Collection work in general and in the most common JVMs?
How do I test and tune my Java applications for performance?