The world is definitely changing! Though theoretically possible that an interpreted language would ultimately surpass the performance of a complied language (since it is able to make optimizations at run-time based on the available hardware), I can't help but to feel... old!
Here's a link to InfoQ's link, refering Charles Nutter:
[on java 6 hotspot] you can do things like omitting synchronization guards until it becomes obvious they're needed. And you can change the set of optimizations applied after the fact...in essence, you can safely be "wrong" and learn from your mistakes at runtime. This is the key reason why Java now surpasses C and C++ in specific handcrafted benchmarks and why it should eventually be able to exceed C and C++ in almost all benchmarks.
Thank god for not doing native code anymore! Thank god for .NET and IL! Thank god I didn't write a blog when I've started coding (15 years ago), because then I clearly didn't believe to get to see this (theoretical) day :)