分享
 
 
 

评测报告:.NET的性能仍然远远落后于Java

王朝java/jsp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

评测报告:.NET的性能仍然远远落后于Java

每个人都看过各种不同的benchmark,有证明.NET比Java快的,也有证明Java比.NET快的。在某些人的手里,benchmark是一面魔镜,透过它能看到想看的东西。所以,当这位名为Cameron的先生要开始在.NET和Java之间做一个benchmark时,他认为自己就是在浪费时间,因为肯定会有人来证明.NET比Java快。

顺便地,Cameron先生提出了10条“不要用于在.NET和Java之间做选择”的理由,其中包括:

Ø 在某一组特定的benchmark中,某一个比另一个快一点;

Ø Microsoft或Sun(或者Oracle、IBM……)的报告说其中一个比另一个好得多;

Ø 你喜欢(或不喜欢)Bill Gates或者Scott McNeally(或者Larry Ellison);

Ø 你认为Microsoft或者Sun(或者IBM或者Oracle)很邪恶(或者很伟大);

Ø 你在TheServerSide.com或者GotDotNet.com(或者Microsoft.com)读了一篇“没有偏见”的文章;

实际上,这次benchmark源于Cameron与tRolf两人在TheServerSide.com网站的一次关于Web服务性能的争吵(http://www.theserverside.com/reviews/thread.jsp?thread_id=19226)。在这次的benchmark中,Cameron测试了下列版本:

.NET 1.0sp2:

Microsoft (R) Visual C# .NET Compiler version 7.00.9466

for Microsoft (R) .NET Framework version 1.0.3705

Copyright (C) Microsoft Corporation 2001. All rights reserved.

.NET 1.1:

Microsoft (R) Visual C# .NET Compiler version 7.10.3052.4

for Microsoft (R) .NET Framework version 1.1.4322

Copyright (C) Microsoft Corporation 2001-2002. All rights reserved.

Sun Hotspot Server JVM from JDK 1.3.1_04:

java version "1.3.1_04"

Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_04-b02)

Java HotSpot(TM) Server VM (build 1.3.1_04-b02, mixed mode)

Sun Hotspot Server JVM from JDK 1.4.0_02:

java version "1.4.0_02"

Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0_02-b02)

Java HotSpot(TM) Server VM (build 1.4.0_02-b02, mixed mode)

Sun Hotspot Server JVM from JDK 1.4.1_02:

java version "1.4.1_02"

Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_02-b06)

Java HotSpot(TM) Client VM (build 1.4.1_02-b06, mixed mode)

在代码方面,Cameron主要选择了大量ArrayList来进行测试。下列是他的测试代码:

C#

// C# Create 100,000 people in an ArrayList and access them

using System;

using System.Collections;

public class ManyPeople

{

public static void Main()

{

for (int i = 0; i < 100; i++)

test(i);

}

public static void test(int iIter)

{

DateTime start = DateTime.Now;

for (int i = 0; i < 20; i++)

new ManyPeople().Average();

DateTime finish = DateTime.Now;

Console.WriteLine("Total time for iteration " + iIter + ": " + (finish - start));

}

private long Average()

{

ArrayList list = new ArrayList(100000);

for (int i = 0; i < 100000; i++)

list.Add(new Person(i, "John " + i));

long silly = 0;

foreach (Person p in list)

silly += p.Id;

return silly / 100000;

}

}

// Person.cs: a very simple guy

public class Person

{

int id;

string name;

public Person(int anId, string aName)

{

this.id = anId;

this.name = aName;

}

public int Id

{

get { return this.id; }

}

}

Java:

// Java Create 100,000 people in an ArrayList and access them

import java.util.*;

public class ManyPeople

{

public static void main(String[] args)

{

for (int i = 0; i < 100; i++)

test(i);

}

public static void test(int iIter)

{

long start = System.currentTimeMillis();

for (int i = 0; i < 20; i++)

new ManyPeople().average();

long finish = System.currentTimeMillis();

System.out.println("Total time for iteration " + iIter + ": " + (finish - start));

}

private long average()

{

ArrayList list = new ArrayList(100000);

for (int i = 0; i < 100000; i++)

list.add(new Person(i, "John " + i));

long silly = 0;

for (int i = 0; i < 100000; i++)

silly += ((Person)list.get(i)).getId();

return silly;

}

}

// Person.java: a very simple guy

class Person

{

private int id;

private String name;

public Person(int anId, String aName)

{

this.id = anId;

this.name = aName;

}

public int getId()

{

return this.id;

}

}

Cameron所用的测试机器是P3 1GHz、1G内存的笔记本,操作系统是Windows 2000 SP2。下列是在.NET上测试的结果(取最好的6次):

.NET 1.0sp2:

ManyPeople

Total time for iteration 0: 00:00:07.3004976

Total time for iteration 1: 00:00:07.0501376

Total time for iteration 2: 00:00:07.2504256

Total time for iteration 3: 00:00:07.7311168

Total time for iteration 4: 00:00:07.5007856

Total time for iteration 5: 00:00:07.5007856

.NET 1.1:

ManyPeople

Total time for iteration 0: 00:00:08.0916352

Total time for iteration 1: 00:00:08.5222544

Total time for iteration 2: 00:00:08.3520096

Total time for iteration 3: 00:00:08.6324128

Total time for iteration 4: 00:00:08.3419952

Total time for iteration 5: 00:00:08.1617360

可以看到,同样的代码在.NET 1.1上比.NET 1.0 SP2上慢了大约15%。这是一个很奇怪的现象。并且,Cameron观察到,.NET上同样代码的运行速度并不随运行次数的增加而提高,说明.NET CLR只是简单地进行了JIT编译。而在Hotspot Server上,不仅开始时的性能就有优势,而且速度还会不断提高:

Sun Hotspot Server JVM from JDK 1.4.1_02:

java -server -Xms128m -Xmx128m ManyPeople

Total time for iteration 0: 6370

Total time for iteration 1: 5788

Total time for iteration 2: 5868

Total time for iteration 3: 6029

Total time for iteration 4: 5748

Total time for iteration 5: 5738

Total time for iteration 6: 5729

Total time for iteration 7: 5948

Total time for iteration 8: 5688

Total time for iteration 9: 5679

Total time for iteration 10: 5658

Total time for iteration 11: 6028

Total time for iteration 12: 5699

Total time for iteration 13: 5708

Total time for iteration 14: 5678

Total time for iteration 15: 5969

Total time for iteration 16: 5628

Total time for iteration 17: 5538

Total time for iteration 18: 5608

Total time for iteration 19: 5498

Total time for iteration 20: 5768

Total time for iteration 21: 5518

Total time for iteration 22: 5307

Total time for iteration 23: 4247

Total time for iteration 24: 4696

Total time for iteration 25: 4617

Total time for iteration 26: 4777

Total time for iteration 27: 4286

Total time for iteration 28: 4677

Total time for iteration 29: 4626

Total time for iteration 30: 4697

Total time for iteration 31: 4286

Total time for iteration 32: 4697

Total time for iteration 33: 4617

Total time for iteration 34: 4696

Total time for iteration 35: 4307

Total time for iteration 36: 4686

Total time for iteration 37: 4807

Total time for iteration 38: 4517

Total time for iteration 39: 4306

Total time for iteration 40: 4657

Total time for iteration 41: 4807

Total time for iteration 42: 4596

Total time for iteration 43: 4206

Total time for iteration 44: 4777

Total time for iteration 45: 4717

Total time for iteration 46: 4607

Total time for iteration 47: 4196

Total time for iteration 48: 4796

Total time for iteration 49: 4707

Total time for iteration 50: 4777

Total time for iteration 51: 4196

Total time for iteration 52: 4627

Total time for iteration 53: 4687

Total time for iteration 54: 4806

Total time for iteration 55: 4186

Total time for iteration 56: 4627

Total time for iteration 57: 4697

Total time for iteration 58: 4807

Total time for iteration 59: 4166

Total time for iteration 60: 4616

Total time for iteration 61: 4697

Total time for iteration 62: 4717

Total time for iteration 63: 4346

Total time for iteration 64: 4717

Total time for iteration 65: 4617

Total time for iteration 66: 4626

Total time for iteration 67: 4367

Total time for iteration 68: 4706

Total time for iteration 69: 4617

Total time for iteration 70: 4617

Total time for iteration 71: 4366

Total time for iteration 72: 4687

Total time for iteration 73: 4616

Total time for iteration 74: 4196

Total time for iteration 75: 4787

Total time for iteration 76: 4687

Total time for iteration 77: 4807

Total time for iteration 78: 4436

Total time for iteration 79: 4387

Total time for iteration 80: 4676

Total time for iteration 81: 4807

Total time for iteration 82: 4417

Total time for iteration 83: 4296

Total time for iteration 84: 4686

Total time for iteration 85: 4797

Total time for iteration 86: 4266

Total time for iteration 87: 4697

Total time for iteration 88: 4617

Total time for iteration 89: 4717

Total time for iteration 90: 4276

Total time for iteration 91: 4707

Total time for iteration 92: 4616

Total time for iteration 93: 4697

Total time for iteration 94: 4296

Total time for iteration 95: 4677

Total time for iteration 96: 4546

Total time for iteration 97: 4697

Total time for iteration 98: 4296

Total time for iteration 99: 4677

可以看到,随着运行次数的增加,Sun Hotspot Server不断将领先优势拉大,最后几乎比.NET 1.1快了一倍。.NET CLR始终无法将运行时间降低到8秒以下,而Sun Hotspot Server在多次运行之后则可以保持在5秒以下。因此,Cameron认为,对于大运算量的应用程序,Hotspot JVM比Microsoft CLR要快得多。

原文及完整的benchmark数据请看Cameron的blog:

http://www.freeroller.net/page/cpurdy/20030516

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有