你可能错过的东西:.NET 3.5 SP1中的JIT增强

一个主要的影响就是内联函数(Inlining Function)调用。之前,JIT对内联方法的处理非常保守,Vance Morrison解释了个中缘由,

它对内联的处理并不是很好。内联总是减少指令执行的数量(这是由于最低限度的调用和返回指令没有被执行),但是它能(并经常)让结果代码变得很大。大部分人都能直觉地理解,内联大的方法(比如1Kb的)不是很有意义,而内联非常小的方法可以让调用的占用空间更小(由于调用指令才5字节),这样的选择总是正确的,但是介于两者之间的方法要如何处理呢?

有趣的是,当你让代码变大时,你也就让它执行缓慢,因为内存天生地缓慢;你的代码越大,它越不会放在最快的CPU缓存(称之为L1)里面执行,在那样的情况下,处理器需要执行3-10个周期直到它能从另外的缓存(称之为L2)中获取到执行代码,如果L2缓存中还不存在,那么就需要到主内存中获取(需要花费10+周期)。对于在紧密循环中执行的代码,这样的结果不会有什么问题,因为所有的代码都适合放入到最快缓存中(典型的是64K),不过对于“常规的”代码,它通过大量的方法来执行大量的代码,“越大就越慢”的效果就非常显著。更大的代码也就意味着在启动时从磁盘获取代码需要更大的磁盘I/O,这就意味着你的应用程序启动较慢。

在Service Pack 1中,微软引入了一个新的基于代码尺寸的启发式算法,来判断调用是否处于一个循环中。在常规情况下,函数只有当在调用空间中的结果机器码比原始版本要小时,才能被内联。这样做就保证了尽可能多的代码能适合CPU的缓存,当缓存不够用时,就能对性能产生巨大的影响。

当处在循环中时,分部异常也可以很好地工作。这是因为据推测函数通常会被多次调用,所以CLR允许内联函数可以增长至原始调用大小的5倍大。类似值类型优化这样的条件有可能更进一步地增加容许尺寸的大小。

查看英文原文:http://www.infoq.com/news/2008/09/JIT-Inlining

时间: 2024-09-05 12:15:01

你可能错过的东西:.NET 3.5 SP1中的JIT增强的相关文章

mfc-MFC 所有控件的属性中有东西,但是Control Events中是空的

问题描述 MFC 所有控件的属性中有东西,但是Control Events中是空的 MFC 所有控件的属性中有东西,但是Control Events中是空的.怎么解决

VB编程 及EXCEL 的VBA编程,用什么把一段代码括起来啊(就是用什么东西来实现C语言中的{}功能啊)?

问题描述 VB编程及EXCEL的VBA编程,用什么把一段代码括起来啊(就是用什么东西来实现C语言中的{}功能啊)? 解决方案 解决方案二:不是有begin和end吗解决方案三:region?C的{}有很多啊,只能你VB书都没看过if...endif-------------if{}for...endfor---------for{}解决方案四:for..next.............我草解决方案五:学c的时候用按键精灵的时候我也愣了一阵子...很多是用end,if之后用endif,while

struts 2什么东西可以代替struts1.x中的actionform

问题描述 rt:最好来个传送门...在线等 解决方案 解决方案二:struts2中的成员变量加get.set方法,struts1中的actionform功能一样都是传递参数解决方案三:引用楼主javaerwhl的回复: rt:最好来个传送门...在线等 没有代不代替一说.struts2中取消了令人繁琐的actionform解决方案四:Structs2中把Action和Form集合到一起了,即在Struts2中只需要一个Action就完成了Struts1中几个分开处理的事情,Struts2比较方便

使用CoffeeScrip优美方式编写javascript代码_javascript技巧

JavaScript无疑是在web最伟大的发明之一,几乎一切网页动态效果都是基于它丰富的计算能力.而且它的能力在各种新的JavaScript的Engine下也越来越强了,比如Google Chrome用的V8 Engine. 但是由于诞生的太早,有很多语法定义在今天看来有些效率低下了,一些更加先进的语法形式,由于历史原因,没办法加入到现在的JavaScript语言中,可以说一种遗憾. 世界上的很多天才都在为构建更好的JavaScript而努力.已经有了很多尝试,其中最有前途的,无非就是Coffe

鲍威尔治下的微软错过了什么?

不久之前,微软的 CEO 史蒂夫·鲍尔默正式宣布即将在一年内退休.这位在微软待了三十余年的老将在宣布离职消息后,股价盘前大涨了 8%. 鲍尔默在任期间,微软实在是错过了太多东西.微软彻底错过了触屏手机时代,鲍尔默在 2007 年曾经说:"iPhone 是不可能得到多少市场份额的".微软也彻底错过了平板电脑,他们推出的 Surface 不仅销量低迷而且造成了高达 9 亿美元的存货调整费用. 鲍尔默在接受 ZDNet 的采访时称他最自豪的事是"能在智能化个人计算趋势兴起之初,就成

Linux中如何删除几天以前的所有东西?

Linux中如何删除几天以前的所有东西(包括目录名和目录中的文件)? 我们可以有以下两种方法: 1 find . -ctime +3 -exec rm -rf {} \; 查找3天之前的文件,之后执行删除目录名及文件操作 2 find ./ -mtime +3 -print|xargs rm -f –r 查找3天之前的文件,之后执行删除目录名及文件操作

HttpSession中保持的东西多大可能影响性能?

问题描述 最近在做一个系统的性能调优,说实话我没撒经验,用LoadRunner+JProfiler对执行时间和内存进行分析.偶尔发现在执行了一段时间后,一个用户HttpSession可以达到3M还可能更高.这当然和系统中把很多东西都丢到session中有关.因为我没有相关的经验,不知道session中的东西多大会造成系统性能问题.事实上我发现在压力测试的时候,JVM分配1G的内存都不够用,GC很频繁,Application Server的CPU load也几乎100%,所以我怀疑是内存占用有问题

物联网少了这三样东西就飞不起来

物联网领域如今非常火热,但是很多人却搞错了方向和重点.真正属于未来的物联网,如果不做好这三点内容它就无法成型.它们分别是:数据.分布式的计算能力.以及开放式的信息分享机制.   让我们把脑洞打开,设想一下下面的场景: 你准备去医院, 在屁股动个手术.这次手术你将佩戴 Google 眼镜(Glasses Enterprise Edition 版本),又或者是类似的设备,胯关节的替代物将通过 3D 打印技术制作,当然之前得来一次 X 光射线及 3D 扫描.在手术过程中,一切图像都会通过可穿戴设备,直

绝对不可错过的超实用HTML5代码片段

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 HTML5绝对是一个流行元素,受到如此多的公司组织的追捧,作为极客来说,岂能错过呢?在今天这篇文章中,我们将分享一些超实用的HTML5的代码片段,相信大家一定会喜欢! HTML5视频和fallback 实用HTML5的一个好处就是简化了视频和音频的嵌入代码量,不过呢,如何兼容老版本的浏览器绝对是一个令人头疼的问题,特别是在天朝,老版本的浏览器