BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Mono JIT 增强Trampolines和代码共享功能

| 作者 Jonathan Allen 关注 529 他的粉丝 ,译者 朱永光 关注 0 他的粉丝 发布于 2007年10月30日. 估计阅读时间: 2 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

好奇即时编译器(JIT Compilers)如何工作的吗?最近来自Mono JIT团队的两篇帖子通过描述他们在这些领域的工作情况揭示了Trampolines(弹簧床机制)和代码共享的工作原理。

Mono是一个主要遵循ECMA标准的.NET平台的开源版本。它被定位于给传统的开源和.NET开发人员使用,通过最近几年的不懈努力,它已经成为一个可用的平台了。现在,你在可以在Mono平台上体验好几个Gnome应用程序,以及MP3播放器——Sansa Connect

Paolo Molaro谈到了Trampolines(弹簧床机制)和它们是如何影响JIT运行时内存使用的。简而言之,一个“弹簧床”就是一个函数存根,它能在被调用的时候,触发JIT执行。一旦JIT编译这个函数成为机器码,那么“弹簧床”的指针就会被替换为真实函数的指针。

通过寻找一种被虚方法使用的共享“弹簧床” 的途径,Paolo将会减少Mono所需“弹簧床”数量的大约三分之一。这样的节约,能让应用程序之间有着很大的不同。

在上面的情形中,对于MonoDevelop来说生成的“弹簧床”的数量从21000个减少到7700个(节约了160KB的内存),对于IronPython来说从17000个减少到5400个,以及对于一个“Hello World”的程序从800个减少到150个。

与此同时,Mark Probst也谈到了跨泛型和它们创建出的进程来共享代码的问题。

现在,让我们看看我走过了多少路途来实现泛型共享的。开始的时候,我们只能共享非泛型非静态的方法。接着,我们只能共享所有类型的参数都是引用类型的泛型的实例。后来,Dictionary类和字典能共享方法了。当然,最后所有的功能都被实现了。

查看英文原文:Mono JIT Enhancements: Trampolines and Code Sharing

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT