"Is it simply because C++ is compiled into assembly/machine code whereas Java/C# still have the processing overhead of JIT compilation at runtime?" Basically, *yes!*

Quick note though, Java has more overheads than just JIT compilation. For example, it does much more checking for you (which is how it does things like `ArrayIndexOutOfBoundsExceptions` and `NullPointerExceptions`). The garbage collector is another significant overhead.

There's a pretty detailed comparison [here][1].


  [1]: http://en.wikipedia.org/wiki/Comparison_of_Java_and_C++#Performance