[英]C vs. Java Benchmarks
我最近很好奇 Java 與 C 的相對速度。由於 Java 最終被“解釋”,如果它比 C 更快,我會感到驚訝。
我編寫了以下短程序來檢查一個數是否為素數一百萬次。 這是在 Java 中:
import java.lang.Math;
class time_test {
public static void main(String[] args){
boolean prime = true;
long start, end;
try{
// get the int
int num = Integer.parseInt(args[0]);
// start the clock
start = System.nanoTime();
for (int h=0; h<1000000; h++)
for (int i=2; i<Math.floor(Math.sqrt(num))+1; i++)
if (num % i == 0) prime = false;
end = System.nanoTime();
System.out.println((end-start)/1000000000.0);
System.out.println(prime);
}
catch(Exception e) {
System.out.println(e.toString());
}
}
}
它在 C 中:
#include <time.h>
#include <stdio.h>
#include <math.h>
#include <stdbool.h>
#include <stdlib.h>
clock_t start, end;
int main(int argc, char * argv[]){
bool prime = true;
int num = atoi(argv[1]);
start = clock();
for (int h=0; h<1000000; h++)
for (int i=2; i<floor(sqrt(num))+1; i++)
if (num%i == 0) prime = false;
end=clock();
printf("%f\n", (double) (end-start)/CLOCKS_PER_SEC);
if (prime) printf("true\n");
else printf("false\n");
}
我編譯了 Java 版本:
javac time_test.java
和 C 版本:
gcc time_test.c -lm
然而,當我用 27221 運行它們時,Java 版本在 0.365623241 秒內完成,C 在 0.647930 內完成。 怎么會這樣? 即使使用-O3
優化,C 版本也只能在 0.366007 秒內完成,這與 Java 差不多? 我一生都被騙了嗎::)
在開頭TM中,Java 被解釋為真。 但這些時代早已一去不復返了。 今天常見的 JRE 使用一種稱為即時編譯的技術,它將字節代碼翻譯成主機處理器的本地機器語言。 甚至有 Java 個編譯器生成本地機器代碼。
因此,基准測試通常顯示 C 和 Java 的可比較結果。但是由於編寫基准測試真的很難,所以您的結果僅對您的特定程序是正確的。 你無法推導出任何關於語言力量的陳述。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.