-回 《跨平台的客场交锋:.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的版本是否一致。

|