Core Java. Volume 1, Fundamentals
Cay S. Horstmann and Gary Cornell's Core Java. Volume 1, Fundamentals (8th edition, revised and updated for Java SE 6) is not for the faint-hearted read. It requires some well-rewarded patience, not only because of the size of the type-face its designers have employed but also because of the quantity and quality of useful detail it provides.
I started with the section on dynamic binding which starts on page 181 and continues for the next page or so. [Yes, there is a little typo at the bottom of page 181 ("runtimeruntime") but such typos in a book of this size, with more than 800 pages of densely packed material, and that only in the first volume, should be forgivable.]
Having overlooked the small type face, the material reads almost flawlessly. All the high notes on dynamic binding are articulated in about 1.5 pages, including a discussion of the common concept of method tables and the more Java-specific method declarations that lead to static binding. Read one more page and you get an analysis of how early Java programmers used final methods to force inlining by compilers--a practice that seems to have been abandoned with the advent of just-in-time compilers, and then there is a little subtext on JIT compilers' minor shortcoming in the highly improbable cases where a subclass is loaded by a "warm" compiler.
[I know Mr. Horstmann got a bit upset with the change in placement of Java DB in early updates of Java 6, but I consider his book well-worth a read, and I might write more about it.]