老問題新測試:java和C單機性能比較

Java和C最大的不一樣是在於Java的可伸縮性Scalable,可以平滑發展到分佈式雲計算平臺,經過雲計算可以處理不斷增加的業務訪問量,這個代價過程是很是小容易的。

那麼在單機環境下,Java過去一直被認爲低於C程序,最近老外作了一個實驗,進行了比較:

String Hash案例
Complete C++ code: http://pastebin.com/d280c1cd4
Complete Java code: http://pastebin.com/m541c4655
主要核心程序以下,是一個循環:
html


int h=0;
for( int i=0; i h = 31*h+str[i];
return h;

在新的x86上運行100 million 循環,結果以下:
> a.out 100000000
100000000 hashes in 5.636362 secs
> java str_hash 100000000
100000000 hashes in 5.745 secs

二者相差無多,據做者介紹,若是在老版本的gcc & Java比較,Java會比C快15%,但此次是C++ 要快2%。


篩選案例
Complete C++ code: http://pastebin.com/m3784c090
Complete Java code: http://pastebin.com/m4b414295
核心代碼以下:

bool *sieve = new bool[max];
for (int i=0; i true;
sieve[0] = false;
sieve[1] = false;
int lim = ( int)sqrt(max);
for ( int n=2; n if (sieve[n]) {
for ( int j=2*n; j sieve[j] = false;
}
}

測試結果:
> a.out 100000000
100000000 primes in 1.568016 secs
> java sieve 100000000
100000000 primes in 1.548 secs
Java要快些。

Profiling Enables Big Gains案例
Complete C code:
vcall.cpp http://pastebin.com/m70dbe7d6
vcall.hpp http://pastebin.com/m13055a8c
A.cpp http://pastebin.com/m5aa1b232
B.cpp http://pastebin.com/m2e46ec23

Complete Java code:
vcall.java http://pastebin.com/m149bbdf0
A.java http://pastebin.com/m2e33d6df
B.java http://pastebin.com/m2b1d75bb

核心代碼是:

int sum=0;
for (int i = 0; i < max; i++)
sum += val(); // virtual call
return sum;

在一樣x86上測試結果:
> a.out 1000000000 0
1000000000 adds in 2.657645 secs
> java vcall 1000000000 0
1000000000 adds in 0.0 secs

Java幾乎是無限地快,至少能夠說明Java不比C慢,甚至在某些狀況下快於C,那種認爲java比C慢的觀點應該扔到垃圾堆裏去了。

原文:
Java vs C performance... again...
相關文章
相關標籤/搜索