If you want to write something that is truly fast (linear algebra operations, real time graphics, JIT compiler, etc), pretty much your only choices are c, c++ or assembly. Often a mix of all three are used. I believe Linus Torvolds said that in some cases he optimises down to the point where he is shuffling instructions so that they enter the pipeline in a better order. That's the sort of performance I'm talking about here. If you give up strong types and manual memory management, you can't have that level of control anymore.
...and you have to do it all over again with the next generation of processor. And again. And again.
In contrast Java's HotSpot looks at what code is actually being executed (cf what the compliler can guess in the presence of having be pessimistic because of aliasing), and optimises the shit out of that. And when a new processor comes along, your workload is precisely zero, because HotSpot does it all for you. C# still has the aliasing problem, but does optmise for a specific processor when the assembly is installed. (Probably one reason why Windows updates take soo long to complete
)
Interestingly when the same HotSpot techniques were applied to C/C++ code they radically improved the speed of +O2 and +O4 C/C++ code. Even running post-compiled code on an
emulation of processor X was as fast or faster than running the code on the same processor X. Look for HP's Dynamo compiler for details.