到目前为止,我听到的所有内容都是人们说Java通常比C慢,但有一些例外(例如涉及不执行任何操作的代码).所以我出去测试了.我有一个介于0和999,999之间的100,000个整数的数组.我使用double for循环在C和java(在OS X上编译)中从最小到最大对它们进行了排序.
结果是Java通常只用一半的时间就可以完成.在使用不同数组的5次运行中,Java花费了大约17秒,而C花了大约32秒(这包括从文件分配和填充数组的时间,这两者都可以忽略不计).
那么,什么会使Java代码比C运行得更快?是否有我所缺少的东西,或者什么我什么都没听说过的底层技术?
编辑:还不确定是否重要,但我使用time命令(而不是任何自定义代码)对它进行计时.例如:$time java SortArray
至于编译器选项,我现在无法访问该命令行,但这是OS X 10.10上的默认gcc选项:
gcc sortarray.c -o sortarray
而且我只是使用默认的javac来编译Java.
javac SortArray.java
C:
#include
#include
#define SIZE 32
int main()
{
FILE* file = fopen("bigarray.txt", "r");
int arraySize = 100000;
int array[100000] = {};
int i, j, temp;
char inputBuffer[SIZE];
for (i = 0; i < arraySize; i++) {
fgets(inputBuffer, SIZE, file);
array[i] = strtod(inputBuffer, NULL);
}
for (i = 0; i < arraySize; i++)
for (j = i + 1; j < arraySize; j++)
if (array[i] > array[j]) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
for (i = 0; i < arraySize; i++)
printf("%d, ", array[i]);
return 0;
}
Java的:
import java.io.*;
import java.util.Scanner;
public class SortArray {
public static void main(String[] args) throws IOException {
System.out.println("Hello world");
Scanner s = new Scanner(new File("bigarray.txt"));
int[] array = new int[100000];
for(int i=0; i<100000; i++) {
array[i] = s.nextInt();
}
for(int i=0; i
for(int j=i+1; j
if (array[i] > array[j]) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
for(int i=0; i
System.out.print(array[i] + ", ");
}
}
}