我想这里面有以下几个原因:1——
先有JAVA后有.NET,这样,.NET在设计上肯定会充分的考虑JAVA在运行上的性能的问题,进一步优化了。2——
.NET虽然也是跨平台的,但目前只是在WIN32下,因此,顾虑的东西相对JAVA要少3——
.NET是MS开发的,在MS的WINDOWS下,JAVA如何也没有办法来跟.NET这个嫡系子孙来比拼实力的4——
JAVA诞生的时候,WINDOWS还只是3.0这个16位版本
先有JAVA后有.NET,这样,.NET在设计上肯定会充分的考虑JAVA在运行上的性能的问题,进一步优化了。2——
.NET虽然也是跨平台的,但目前只是在WIN32下,因此,顾虑的东西相对JAVA要少3——
.NET是MS开发的,在MS的WINDOWS下,JAVA如何也没有办法来跟.NET这个嫡系子孙来比拼实力的4——
JAVA诞生的时候,WINDOWS还只是3.0这个16位版本
2. 语言问题,.NET支持静态成员,Java不支持,这意味着.NET程序远不如Java那样需要随时随地的到堆上创建对象
3. .NET支持值类型的概念,Java没有,而class总是比struct慢
4. FCL内部使用大量的Interop和P/Invoke实现,实际上很多情况只是原有原生程序的包装,性能上肯定快过“什么都用Java实现”的程序
5. ...
To Sunmast(速马, Reloading...) :觉得 4 可能是主要原因吧!
关于第一条,可以看看李维的《Borland传奇》,当时MS的VJ确实是最强的,我只是说MS在这方面的实力,不是说现在的情况
struct不能被继承,这样使用struct内的函数时不需要查找vtable
...
MSIL在CLR上运行时,是一个JIT编译运行过程。所谓JIT编译就是,当IL assembly运行到原先没有运行过的模块时,JIT编译器就将其编译成本机代码,即二进制代码,并将其在IL中的起始地址修改为编译后的二进制模块的起始地址;没有运行到的部分,仍然还是IL代码。对运行过的部分,已经是本机二进制代码了。这样,当程序第一次运行时,会比较慢,因为正在进行JIT编译,以后便是运行本机二进制文件了,理论上,其速度与其他编译型应用相当。而JAVA则始终是JVM解释执行,这是其与生俱来的:java是解释型语言。不过,以前听说过也有可以将class文件编译成本机代码的机制或技术,但后来没怎么关注过,不知道怎么样了。这是一个普遍适用的规则:编译型程序一般要快于解释型程序。
see : http://www.microsoft.com/china/msdn/archives/technic/faq/0509a.asp
"Java VM(虚拟机)与JIT(Just-In-Time 编译器)之间有什么区别?" 一段,1.1 的java vm都已经支持 JIT了!
拜托,java 的 vm也已经更新了好几代了!我想知道确作的原因而不是猜想!
建议你去问 M$ 和 Sun,.NET 和 Java 不是在座的各位写的吧?在座的哪位敢保证自己了解“确作的原因”而不是“猜想”呢?
上面的解释都错! 因为.NET 是编译执行的,真正的机器码运行
说话不要太绝对,特别是在不知道自己的想法是否正确的时候。“.NET 是编译执行的,真正的机器码运行”,敢问一句:你真的了解 .NET 吗?(我本人来说是真的不太了解 .NET,指教了!)
上面的解释都错!因为.NET 是编译执行的,真正的机器码运行
而.net执行的时候会被进一步编译成本地代码
多一级代理东西就贵一些,呵呵
1.好像两星以上专家分就没有意义了吧?
2.EastenChild说的并不对,如果是那样的话,可以想一下:不然为啥MS不在编译器阶段就编译成binary而是IL呢,那样Framework都不需要装就可以跑了,多happy啊,java还折腾个啥