Sun最近很亢奋啊,又把StrongTalk开源了

链接在这里。连StrongTalk的卖点,一个性能卓越的虚拟机,都被开源了。StrongTalk是SmallTalk的变种,允许静态类型(所以才叫"Strong"而不是small哈。当然,静态类型可用可不用,随喜),支持类型推断。这些还不是主要卖点。StrongTalk的最大卖点还在于速度。他的虚拟机运用所谓的“类型反馈”技术(下面会讲),动态地编译和优化代码,把常用的代码内联,极大地提高了运行速度。StrongTalk的类型系统独立于编译器。也就是说,纯粹动态类型的Smalltalk代码也能在StrongTalk上运行,而且速度和用了静态类型的代码一样快。Sun怎么做到的嗫?关键还是在这个类型反馈机制上:StrongTalk在语言运行时收集性能相关的统计(runtime profiling)。前几百次按通常的方式动态分配函数调用,但数据收集够了后,虚拟机就可以把最常用的函数调用内联到系统里,把常用函数的调用翻译成一个JMP, 跳到最有可能的函数实现那里,然后再来一个CMP,看是不是跳对了地方。只有当CMP失败的时候,系统才执行通常的动态分配,也就是在Hashtable上找来找去。嗯,搞Java的各路英雄不要激动。这个的确是JIT的技术。不过呢,上述的动态内联技术91年就出 论文,类型反馈94年也出 论文了。所以说JIT的技术其实是从Smalltalk那群牛银那里继承来的。不要小看了runtime profiling。其实大部分函数运行时的类型都在很多时候都可以唯一确定。大量的基准测试得出的结果是95%的代码调用可以优化为一个JMP+一个CMP,不需要进一步执行复杂的动态分配查找。呵呵,搞C++的老大们可以留鼻血了。这种优化连vtable都省了。也就是说很多时候动态语言的函数调用比C++还快。有意思的是,虽然StrongTalk的编译器支持静态类型,但编译器优化时完全忽略静态类型!这当然不是因为Sun的程序员2B,而是没有这个必要。静态类型并不能给优化提供多少好处。顺便说一句Ruby。现在CRuby的虚拟机用的是普通的动态分配的方法,每次都在表里面找来找去。现在Sun开源了StrongTalk的虚拟机,也许能让下一代的Ruby虚拟机性能大大提高。
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值