BT

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

Ruby VM综述:MacRuby 0.8、Rubinius 1.2、MRI 1.8.7及1.9.2更新

| 作者 Werner Schuster 关注 6 他的粉丝 ,译者 张龙 关注 12 他的粉丝 发布于 2010年12月30日. 估计阅读时间: 3 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

目前,Ruby VM正以稳健的步伐前进着,前几周又有很多新发布。

近日,Rubinius 1.2发布了,在内存效率与调试方面带来了很多改进。Evan Phoenix详细介绍了Rubinius 1.2的众多改变,比如每个对象的内存使用等:

我们集中精力改进每个对象的内存使用。特别是对象如何在内存中存储其实例变量。由于Ruby并不需要声明实例变量,因此建模实例变量最简单的方式就是使用散列。这正是Rubinius过去的做法。问题出在拥有少量实例变量的类上。在这种情况下,散列表的尺寸就变得很重要了,为了存储一个字(4或8个字节),就需要使用100个字节的内存。

新的代码基于对类的一个很容易观察到的假设,换句话说,在创建类的实例前它会定义好绝大多数方法(通常是所有方法)。我们在创建好类的一个实例后就运行一些代码,它会查找该实例可用的所有方法。这意味着所有方法都定义在类本身、父类以及混合在模块中。我们通过这些方法构建出他们所用的所有的实例变量表。

现在,我们可以很清楚地计算出这个类的实例到底需要占据多少内存,这样就可以将实例变量存储到内存中而无需散列表了。通过这种方式,内存的使用从100个字节下降到了8个字节(在64位机器上)。

长久以来,Rubinius一直拥有一个强大的Debugger API,现在Rubinius 1.2增加了ruby-debug支持。调试内存使用或内存泄漏问题是由堆转储特性所支持的,可以使用Rubinius::VM.dump_heap("/path/to/file")实现。创建堆转储的另外一种方式是使用Rubinius的另一个特性:Query Agent,监测工具可以凭借它访问Rubinius信息并触发某些动作。

MacRuby 0.8也于近日发布了,主要改进了稳定性与兼容性问题。该项目现在集中于1.0版的发布:

从现在开始,我们的发布频率要比以前快很多。我们希望用户能够更频繁地测试MacRuby并报告更多的Bug。

然而,我们并不期望在随后的发布中引入重要的特性,因为现在我们都将精力放在了稳定性和兼容性问题上了。

最后,旧版与新版的MRI都发布了补丁版本:MRI 1.8.7 with p330以及1.9.2 with p136,后者是暨1.9.2发布之后的首次更新

查看英文原文:Ruby VM Roundup: MacRuby 0.8, Rubinius 1.2, MRI 1.8.7 and 1.9.2 Updates

评价本文

专业度
风格

您好,朋友!

您需要 注册一个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