[再]JavaとCの実行速度

| | コメント(2)

前回の記事って本当は、Java > Cという話をしたかったんですよ。ベンチマークって本当に難しいですね! というわけで、今回はJava > Cという話をみつけました。フィボナッチ数列ってやつです。

まずはCバージョンを書いてみましょう。

 1  #include <stdio.h>
 2
 3  int fib(int n) {
 4    if(n < 2)
 5      return n;
 6    else
 7      return fib(n - 2) + fib(n - 1);
 8  }
 9
10  int main() {
11    printf("%d\n", fib(40));
12  }

実行結果は、下記の通りです。

% cc fib.c -o fib 
% time ./fib
102334155
./fib  3.30s user 0.01s system 98% cpu 3.361 total

次は、Javaバージョンを書いてみましょう。

 1  class Fib {
 2      public static int fib(int n) {
 3          if(n < 2)
 4              return n;
 5          else
 6              return fib(n - 2) + fib(n - 1);
 7      }
 8      public static void main(String[] args) {
 9          System.out.println(fib(40));
10      }
11  }

実行結果は下記の通りです。Javaの方が早い結果がでています。

% javac Fib.java
% time java Fib
102334155
java Fib  1.89s user 0.04s system 98% cpu 1.963 total

サーバVM向けの最適化オプションをつけてみましょう。もっと良い結果が得られます。Javaおそるべしですね。

% time java -server Fib
102334155
java -server Fib  1.46s user 0.04s system 95% cpu 1.573 total

ちなみに、gccにも最適化というものがありますので、そちらを有効にしてみましょう。

% cc fib.c -O3 -o fib
% time ./fib
102334155
./fib  1.10s user 0.01s system 93% cpu 1.182 total

アッー!

コメント(2)

yone098 :

アー!

secondlife :

アッー!

コメントする

著者について

高井直人
高井 直人
takai@recompile.net

ソフトウェアエンジニア。1977年横浜生まれ。大学在学中からネットワークや情報技術にたずさわる。Web制作会社などを経て、現在はシステムインテグレータに勤務。エンタープライズRubyをテーマに社内標準の策定などに従事している。

タグクラウド

ウェブページ

Powered by Movable Type 4.1-en-release-26-r1141-20080104