I'm all for experimenting and digging into what the generated code actually looks like. Just remember that it's a moving target, and that you should not assume that the code choices will look similar in the future.
E.g. I'm working on a presentation that demonstrates of how our JITs make use of the capabilities of newer Intel cores. To study machine code, I generally "make it hot" (e.g. with jmh, using DONT_INLINE directives) and then look at it with ZVision (a feature of Zing), which is very useful because the instruction-level profiling ticks allow me quickly identify and zoom into the actual loop with the code I want to study (and ignore the 90%+ rest of the machine code that is not the actual hot loop).
Below is a short sequence from my work-in-progress slide deck. It demonstrates how much of a moving target code-gen is for the exact same code, and even the exact same compiler (e.g. varying according to the core you are running on). In this case you are looking at what Zing's Falcon JIT generates fro Westmere vs. Broadwell for the same simple loop. But the same sort of variance and adaptability will probably be there for other JITs and static compilers.