.Net的运行效率问题

       CLR只执行本机的机器代码。有两种方式产生本机的机器代码:实时编译(JIT)和预编译方式(产生native image)。详细了解了JIT,基本上每个人都知道的是,所有.Net语言都将被编译成为一个叫做IL汇编的中间语言。但是计算机是如何执行这个中间代码的,却是很多人不知道,甚至理解错误了的。

       JIT是.NET程序运行的重要部件之一,全称是即时编译器。我刚才说的误解,就是很多人(绝对不是少数,问了很多c++程序员,10个有9个这种想法)都以为JIT其实就是跟JVM差不多的东西,是一个Interpreter,在运行时读取IL汇编代码,然后模拟成x86代码(也就是俗称的虚拟机)。但是事实上,.NET使用的是更为高级的技术。 .Net程序被加载入内存以后,当某段IL代码被第一次运行的时候,JIT编译器就会将这段IL代码,全部编译成本地代码,然后再执行。这也就是为什么.NET程序第一次运行都启动很慢的原因! 随.NET库,微软还附带了一个工具,可以事先将.NET程序所有的IL代码都编译成本地代码并保存在缓存区中,这样一来,这个程序就跟c++编译的一模一样了,没有任何区别,运行时也可以脱离JIT了(这里不要混淆了,这里不是说可以脱离.NET库,而是说不需要在进行即时编译这个过程了)。所以,.NET和Java运行效率还是有些区别的,当然在执行高IO实时程序时也许仍然不如C++,因为还有在.net framework里面的appDomain的限制。

       Java JIT也曾经是Borland的亮点,.net的JIT想法极有可能就来自Borland,但是在架构了由于不用考虑平台的问题大大优于.net.

       所以在编译系统中,笔者的主张还是"原生才是硬道理"。

原创作品,转载请注明出处

引用通告地址: http://author.w3cool.com/mt-tb.cgi/160
发表评论
姓  名: 与日志主题不符的评论将不予回复,请到留言本.
Email地址: 游客发言不需要密码.
个人主页:
内 容:
验证码:

键入您在以上图片中看到的字符。

选 项: (你可以使用 HTML 标签设置风格)
如果你此前从未在此 Blog 上发表过评论,则你的评论必须在 Blog 主人验证后才能显示,请你耐心等候。.