Java比C快

Bjö*_*röm 7 c java performance

今天我做了一个简单的测试来比较java和c之间的速度 - 一个简单的循环使整数"i"从0增加到20亿.

我真的希望c语言比java更快.我对结果感到惊讶:

java的时间以秒为单位:约.1.8

所花费的时间中对C秒:约.3.6

我不认为java是一种更快的语言,但我不明白为什么循环的速度是我简单程序中c的两倍?

我在节目中做了一个至关重要的错误吗?或者是MinGW的编译器配置错误还是什么?

public class Jrand {

 public static void main (String[] args) {

    long startTime = System.currentTimeMillis();
    int i; 
    for (i = 0; i < 2000000000; i++) {
        // Do nothing!
    }
    long endTime = System.currentTimeMillis();
    float totalTime = (endTime - startTime);

    System.out.println("time: " + totalTime/1000);
 }

}
Run Code Online (Sandbox Code Playgroud)

C程序

#include<stdio.h>
#include<stdlib.h>
#include <time.h>
int main () {

    clock_t startTime;
    startTime = clock();

    int i;
    for (i = 0; i <= 2000000000; i++) {
        // Do nothing
    }
    clock_t endTime;
    endTime = clock();

    float totalTime = endTime - startTime;
    printf("%f", totalTime/1000);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

R..*_*R.. 22

使用除-O0(例如-O2)以外的任何优化级别重建C版本,您会发现它在0秒内运行.所以Java版本需要1.6秒才能做什么,而C版本需要0.0秒(实际上,大约0.00005秒)才能做任何事情.

  • 也许在他的系统上.在我的旧笔记本电脑(Core 2 Duo)的第一次运行*中,Java版本需要0.059秒......这只是JVM的启动时间,可能是磁盘IO.以防万一这里有Java抨击者. (8认同)

Pet*_*rey 10

Java在消除无法执行任何操作的代码方面更为积极.不太可能认为开发人员知道他们在做什么.你没有计算循环,但是java检测和消除循环需要多长时间.

简而言之,Java通常在无用时更快.

您也可能会发现,如果您优化C代码并删除调试信息,它将执行相同的操作,很可能更短.

  • 任何像样的C编译器肯定将不会生成代码在所有的无用的循环,除非你有意与优化禁用,这是单步执行程序,并能够理解抽象机的流量的工具编译. (6认同)