That's actually not true for .net. The tiny local variables can be structs rather than objects. For example if structs could be used for coordinates in this change instead of full objects, they would likely never touch the heap.
But yes, the CLR has a far superior design and can avoid some of Java's pitfalls.
Only in the premature optimization sense, and "familiarity with new programmers" sense. There's nothing wrong with using structs. In fact, XNA and many other game programming libraries do use structs to represent position vectors, which is the context of this article.
>And arrays are reference types too, so things like string.split have no workaround.
If you're okay with going unsafe, arrays can be stackalloc'd.