An interesting read and still worth thinking about, although as some of the comments note, some of the specific behavior the post talks about changed in Java 1.5 (the post is from 2005).
Thanks for noting. Edited the title to make it easier to see (I certainly missed this fact). Howerver, some points it makes are still current, specially about substring chains (which also apply to sub-collections). Most people who use profiles with memory profiling learn these things the hard way...