簡體   English   中英

C 對比 Java 基准

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM