In February 2014 I wrote "Why does Minecraft (and Java, in general) use so much memory?". The contents are still quite relevant but there have been a few changes and clarifications I'd like to make. I will be putting up a new, rewritten version of the post that will take a more in-depth, yet beginner-friendly look at the Java memory model.
Java 8 was released shortly after I wrote my post. It does not have a major impact, except for the PermGen space which is now gone. By the way, if you haven't updated, you should.
Weaknesses in the post
The post was quite good and it explains things relatively well but there are some spots where it could be improved. Notably, I will be adding slightly more discussion about generations in my next post.
Also, parts of the post are quite naive. This will be corrected as much as possible.