Ruby中的运行时假设

时间:2010-05-25 13:52:19

标签: ruby language-design abstraction

Ruby看起来很酷。我已经开始学习它过去两天了。在Ruby中吸引我的一件事是它的简单性。非常干净的代码是可能的。但是,Ruby的内部实现并未暴露给外部世界。我了解到Ruby是根据各种口味用各种语言编写的。

让我感到困惑的一件事(因为我来自Java背景)是内存使用和速度,因为它具有更强的抽象级别。我只是想听听Ruby用户对此有何看法。通过内存使用和速度,我的意思是在Java中我将决定何时去寻找一个ArrayList,什么时候去寻找一个LinkedList,何时去寻找哈希。我完全了解他们的实现,即使我不这样做,我也可以看看他们。但在Ruby中,它并不简单(我知道它应该是一个有效的实现)。但是,我怎么能确定我没有过度使用东西。例如,当我简单地定义一个数组时会发生什么。它是一组典型的连续内存位置还是完全不同的实现方式?

另外,用各种语言编写的Ruby遵循实现的类似算法,或者它与语言不同。

好奇......

1 个答案:

答案 0 :(得分:2)

在部署时,Ruby的内存使用肯定是痛点。例如,使用最佳实践开发的开发良好(在术语的两个含义中:1)和2)广泛的)Rails应用程序“很乐意”在其部署的系统上占用超过256mb。但是你得到了所有非常有用的语法糖。这对“邪恶”来说是“好”。

我不会太关心Ruby如何存储Array对象,就像你的例子一样。即使作为一名经验丰富的Ruby开发人员,我也不关心它是如何存储的,因为我假设语言创建者已经知道如何优化语言并且已经做得很好。但是,每个版本都更快。

在您的应用程序中应该注意内存使用情况时,会想到两个地方:

  • 阅读大文件
  • 创建大量对象

如果您要在Ruby程序中读取160MB的文件,那将是160MB以上的内存。

然后,如果创建了太多对象,则每个对象都有自己的内存分配。假设它是每个对象16kb。如果你创建了一百万个对象,那就是16,000,000kb,或16GB。

小心!

您可能也对this handy tool感兴趣。