大家都说,Java性能现在已经很好啦,不能再抱着老观点去看它啦,甚至也有人说,Java性能已经超越C++了。我也相信Java虚拟机在不断优化,性能有很大提高,但要说它能超越C++,我想还是有相当难度的,当然,不排除在某些特殊情况下它能超越C++。不过眼见为实,耳听为虚,不想看那些所谓权威机构的测试结果,就自己动手吧,写几行代码权当消遣。呵呵,网上已经有人贴了这类测试代码,拿来改一下,我们就简单的计算平方和然后再取模就是了。代码写完,可以跑起来看看了。哦,我们的环境是:
Windows XP Professional Service Pack 3
Intel Core2 Duo CPU T7300 @ 2.00GHz
778MHz, 2GB RAM
Visual C++ 2008 Express Edition
java version "1.6.0_10-beta"
运行结果(运行时间,单位为秒):
|
1st
|
2nd
|
3rd
|
Average
|
Java
|
1.55
|
1.53
|
1.54
|
1.54
|
C++
|
1.41
|
1.41
|
1.41
|
1.41
|
可以看到,对我的测试例而言,两者性能确实相差不大了,Java只比C++逊色那么一点点,对大多数应用而言,这点性能损失确实可以忽略不计了。
声明一下,测试结果严重依赖于测试用例,所以我的测试也不一定具有代表性,大家看看就好,不用太认真,:)
最后贴上测试用的源码:
C++代码:
#include "stdafx.h"
#include <iostream>
#include <windows.h>
using namespace std;
class TimeRecorder
{
public:
TimeRecorder() { Start(); }
void Start() { m_start = GetTickCount(); }
void Stop() { m_end = GetTickCount(); }
double GetInterval() { return (m_end - m_start)/1000.0; }
private:
DWORD m_start;
DWORD m_end;
};
int g_result;
double compute(int maxVal, int modNum)
{
TimeRecorder timer;
int result = 0;
for (int i = 1; i < maxVal; i++)
{
result += i * i;
result %= modNum;
}
// 有些ugly, 不过不加此句的话上面的计算过程会被完全忽略掉, 运行时间为0,
g_result = result;
timer.Stop();
return timer.GetInterval();
}
int _tmain(int argc, _TCHAR* argv[])
{
double time = 0.0;
for (int i = 100000; i < 1000000; i += 100000)
{
for (int j = 100000; j < 1000000; j += 100000)
{
time += compute(i, j);
}
}
cout << time << endl;
}
Java代码:
import java.util.Arrays;
public class GeneratePrimes
{
public static double compute(int maxVal, int modNum)
{
long start = System.currentTimeMillis();
int result = 0;
for (int i = 1; i < maxVal; i++)
{
result += i * i;
result %= modNum;
}
g_result = result;
return (System.currentTimeMillis() - start)/1000.0;
}
public static void main(String args[])
{
double time = 0.d;
for (int i = 100000; i < 1000000; i += 100000)
{
for (int j = 100000; j < 1000000; j += 100000)
{
time += compute(i, j);
}
}
System.out.println(time);
}
public static int g_result;
}
本文转自Intel_ISN 51CTO博客,原文链接:http://blog.51cto.com/intelisn/130677,如需转载请自行联系原作者