Memory Access Patterns Are Important
mechanical-sympathy.blogspot.co.uk
mechanical-sympathy.blogspot.co.uk
In my experience designing high-performance algorithms on modern processors, I'd estimate 80% of all performance optimizations are actually memory behavior hacks. Designing better algorithms is another 10% and is harder to do (most software engineers have never designed a genuinely original algorithm). The last 10% is everything else, such as redesigning the code to get closer to saturating all 3 ALUs available on modern cores. (Code hacks to force ALU saturation sounds like it shouldn't do much but I've seen 2x performance gains for some algorithms where the "obvious" implementation tended to serialize over one ALU if you analyze them.)
For high-performance code junkies, memory access optimization is the bread and butter for integer factor performance gains.
In summary, from my experience- I agree. Memory access (also, storage access) is huge. Much bigger than tight loops or logical reduction/optimization.
From the old demo days, there was the famous rotozoom effect, and it showed how linearly arranged array when rotated 90 degrees was becoming way slower, and if some swizzling was done it was better.
Another example is texture mipmaps. If you have one large image, say 4096x4096 without mipmaps, and you have to scale it down and display at say 64x64 - then there would be a lot of cache misses (and aliasing problems - shimmering, etc.)
And those are just the most obvious problems, there are lot of more tricky ones.
Judy Arrays were written with that in mind, but maybe they are overly comlex for the things achieved - http://judy.sourceforge.net/
(For example, one could implement a java compiler that correctly made all Java code work, but gave absolutely no memory locality--different instance variables of an object could be arbitrarily far apart, and you could even implement arrays as linked lists (or at least chunk lists) so that arrays don't guarantee locality either. One couldn't make the optimizations he made under those conditions. But any language where you know what data will be contiguous allows you to make these optimizations.)
I'd guess that you knew this, but your comment suggests that there's something special about the JVM that makes it especially well-suited for these optimizations, which might confuse readers.