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