-回 《跨平台的客场交锋:.NET vs. JAVA on Linux 》
<跨平台的客场交锋>一文中关于java的几点测试我不敢苟同
1。速度
以下是我的测试结果(我将<跨平台的客场交锋>一文中程序稍做了改动)
运行环境:
Windows 2K 中文版+ sp2 P41.5 /256M
Jdk1.3.1_002
.NET的测试程序
using System;
namespace ConsoleApplication7
{
class test
{
static void Main(string[] args)
{
int temp=1;
DateTime a = DateTime.Now;
for(int i = 1; i <=1000000000; i++)
{
temp += i;
}
DateTime b = DateTime.Now;
TimeSpan c = b - a;
Console.WriteLine(c.TotalMilliseconds);
Console.WriteLine(temp);
}
}
}
Java 的测试程序
public class My
{
public static void main(String args[])
{
long a,b;
int temp=1;
a = System.currentTimeMillis();
for(int i = 1; i <=1000000000; i++)
{
temp += i;
}
b = System.currentTimeMillis();
System.out.println(b - a);
System.out.println(temp);
}
}
测试结果
Dot Net : 2437
Java (-hotspot) : 6141
Java (-classic) : 59796
Java (-server) : 375
(我在JDK1.4.0_01下的结果基本同Jdk1.3.1一至. 有人在JDK1.4.0下得到0的结果,是因为没有 System.out.println(temp)一句,计算过程都被优化掉了)
第二个测试,我将上面的程序中temp+=i改为temp*=i,结果如下:
Dot Net : 10234
Java (-hotspot) : 21109
Java (-classic) : 59984
Java (-server) : 9625
这些结果意味着什么,我想我也不必多说。
同样的计算在Delphi 6 下的结果:
加法:1514
乘法: 9797
Delphi 程序
program my;
{$APPTYPE CONSOLE}
uses
SysUtils,DateUtils;
var
i,temp:integer;
b,e:TDateTime;
begin
b:=Now();
for i:=1 to 1000000000 do
temp:=temp*i;
e:=Now();
writeln(MilliSecondsBetween(b,e));
end.
同样的计算在C++ 下的结果:
VC7.0
加法:1390
乘法:10281
BCB6.0
加法:1422
乘法:9641
c++程序
#include <windows.h>
#include <stdio.h>
int main(int argc, char* argv[])
{
int b,e;
int temp=1;
b = GetTickCount();
for(int i = 1; i <=1000000000; i++)
{
temp += i;
}
e=GetTickCount();
printf("%d",e-b);
printf("\n%d",temp);
return 0;
}
(注:以上程序均为Release版,速度优化)
2。LINUX和Windows下Java的编译结果不同?
我没有安装Linux,没法对比两个平台的编译结果是否不同,
但我相信出现这种结果是有原因的,但我很难相信是由于平台
问题。我不知道作者是否检查过两个平台上jdk的版本是否一致。