C与Java性能基准测试:为何Java运行速度不输C?
为什么未优化的C比Java慢,加-O3后性能相当?
纠正认知误区:Java并非纯解释型语言,主流JVM(如HotSpot)会通过**即时编译(JIT)**优化热点代码。你这里循环一百万次执行素数检测,属于典型的热点代码,JVM会在运行时将其编译为高效的本地机器码,而非一直用解释器执行。
未优化的C(gcc -O0)性能拉胯的原因:gcc默认编译选项是
-O0,这个级别几乎不做任何优化,目的是保留调试友好的代码结构——比如变量始终存在内存中而非寄存器、不展开循环、不内联函数、不消除冗余计算,这些都会导致代码执行效率极低。gcc -O3的优化效果:
-O3是gcc的最高优化级别之一,会开启大量激进优化:循环展开减少分支跳转开销、函数内联消除函数调用开销、常量传播减少不必要的计算、寄存器分配优化减少内存读写、指令重排适配CPU流水线特性等。这些优化会把C代码转化为和JIT编译后的Java代码效率相近的机器码,所以两者性能相当。测试场景的特殊性:你的测试是高频重复的计算任务,正好契合JVM JIT的优化场景,也能让gcc的-O3优化充分发挥作用,最终两者的执行效率就会趋近一致。
内容的提问来源于stack exchange,提问作者Isaac D. Cohen
相关产品推荐
相关产品推荐

