That seems very unlikely.  Effects like the ones in the article (which is great, btw) can't be "fixed" simply by moving the data.  In the first example, there's simply no way for any runtime environment to "know" at creation time that you would be walking the array in 16 byte strides.  And if it tried to reorder the data dynamically, it would obviously have to <i>touch</i> all that memory, thus invalidating whatever caching could be done anyway.<p>Where JVMs beat naive C, it's almost always in the locking and synchronization code.  See the Sun paper on Biased Locking for an example of the kind of tricks you can do by (for example) "guessing" that newly locked objects are only ever going to be referenced by one thread.<p>But memory is memory.  The JVMs view of it lacks a raw pointer, but is otherwise pretty much the same as C's.