Even things like the good idea to reduce the number of times the "length" of an array is referenced are actually a complete waste of time. Every compiler today uses "live variable analysis" and "reachability" (feel free to google for them - should be slides on them in any really good Computer Science undergrad course) to automatically remove every single unecessary calculation.
For array.length this is true.. but for String.length(), where you have a method invocation that possibly has side effects, it is likely a different story.
I agree in principal that optimizations should be left to the compiler, particularily for Java where the 'final' compiler is often not under your control. But there are still some low-level optimizations that are still useful.