Java faster than C

This question already has an answer here:

  • How do I write a correct micro-benchmark in Java? 11 answers

  • Rebuild your C version with any optimization level other than -O0 (eg -O2 ) and you will find it runs in 0 seconds. So the Java version takes 1.6 seconds to do nothing, and the C version takes 0.0 seconds (really, around 0.00005 seconds) to do nothing.


    Java is more aggressive at eliminating code which doesn't do anything. It is less likely to assume the developer knows what they are doing. You are not timing the loop but how long it takes java to detect and eliminate the loop.

    In short, Java is often faster at doing nothing useful.

    Also you may find that if you optimise the C code and remove debugging information it will do the same thing, most likely shorter.


    If you want to benchmark this, instead of doing nothing, try to something useful like calculating something on each iterations. For eg count the loops in some other variable, and make sure you use it at the end (by printing it for eg), so that it will not be optimized out.

    Alternate simple tests could be accessing an array linearly (reading only), copying elements from one array to another (read+write), or doing some operations on the data. Some of these cases might be interesting as they open several very simple compiler optimizations that you can later see in the result binary/bytecode, such as loop unrolling, register allocation, and maybe even more complicated stuff like vectorization or code motion. Java on the other may employ some nastier tricks such as jitting (dynamically recompiling on the fly)

    The scope of compiler optimization is huge, you've just encountered the most basic one - eliminating useless code :)

    链接地址: http://www.djcxy.com/p/86540.html

    上一篇: 处理时间测量的最佳方法是什么?

    下一篇: Java比C更快