In addition, can anybody suggest something more along the lines of Jeffrey Richter's CLR via C# for the JVM/Java? CLR via C# covers a wide range of topics about how garbage collection, threading, appdomains, etc. work under the CLR using examples from C#, which I think would be more useful for learning what you need to know about Java and the JVM than your typical Java programming book.