老问题新测试:java和C单机性能比较

JavaGG 发布于 2009/09/14 22:19
阅读 2K+
收藏 0

Java和C最大的不同是在于Java的可伸缩性Scalable,能够平滑发展到分布式云计算平台,通过云计算能够处理不断增长的业务访问量,这个代价过程是非常小容易的。

那么在单机环境下,Java过去一直被认为低于C程序,最近老外做了一个实验,进行了比较:

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


int h=0;
for( int i=0; i<len; 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<max; i++) sieve[i] = true;
sieve[0] = false;
sieve[1] = false;
int lim = (int)sqrt(max);
for (int n=2; n<lim; n++) {
if (sieve[n]) {
for (int j=2*n; j<max; j+=n)
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慢的观点应该扔到垃圾堆里去了。

加载中
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部