ruby - 是什么让 Ruby 变慢了?

标签 ruby performance garbage-collection dynamic-languages

<分区>

Ruby 在某些事情上很慢。但它的哪些部分最有问题?

垃圾收集器对性能的影响有多大?我知道我曾经有过单独运行垃圾收集器需要几秒钟的时间,尤其是在使用 OpenGL 库时。

我在 Ruby 中使用过矩阵数学库,速度特别慢。 ruby 实现基础数学的方式有问题吗?

Ruby 中是否有任何无法有效实现的动态特性?如果是这样,其他语言如 Lua 和 Python 如何解决这些问题?

最近有没有显着提高性能的工作?

最佳答案

Ruby is slow. But what parts of it are the most problematic?

它对方法进行“后期查找”,以提供灵 active 。这会减慢它的速度。它还必须记住每个上下文的变量名称以允许 eval,因此它的框架和方法调用速度较慢。目前它还缺少一个好的 JIT 编译器,虽然 MRI 1.9 有一个字节码编译器(更好),并且 jruby 将它编译成 java 字节码,然后(可以)通过 HotSpot JVM 的 JIT 编译器编译,但它最终是关于与 1.9 相同的速度。

How much does the garbage collector effect performance? I know I've had times when running the garbage collector alone took several seconds, especially when working with OpenGL libraries.

来自 http://www.igvita.com/2009/06/13/profiling-ruby-with-googles-perftools/ 的一些图表我想说它大约需要 10%,这是相当多的——您可以通过增加 gc.c 中的 malloc_limit 并重新编译来减少命中率。

I've used matrix math libraries with Ruby that were particularly slow. Is there an issue with how ruby implements basic math?

Ruby 1.8“没有”实现基础数学,它实现了数字类,并且每次调用都会调用一次 Fixnum#+ Fixnum#/之类的东西——这很慢。 Ruby 1.9 通过内联一些基本的数学操作来作弊。

Are there any dynamic features in Ruby that simply cannot be implemented efficiently? If so, how do other languages like Lua and Python solve these problems?

eval 之类的东西很难有效地实现,但我确信可以做很多工作。 Ruby 的问题在于它必须适应有人在另一个线程 自发地更改类的定义,因此它必须非常保守。

Has there been recent work that has significantly improved performance?

1.9 相当于 2 倍的加速。它也更节省空间。 JRuby 一直在努力提高速度 [而且在 GC 上花费的时间可能比 KRI 少]。除此之外,除了我一直在从事的小爱好之外,我并不知道太多。另请注意,由于编码友好性,1.9 的字符串有时会变慢。

关于ruby - 是什么让 Ruby 变慢了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1011460/

相关文章:

Windows 上 Chocolatey 下的 Ruby 和 Ruby Dev

ruby-on-rails - 我可以强制 Rails 自动加载命名空间而不嵌套在文件夹中吗?

javascript - 在避免重复的同时有效地在 postgres 中实现分页?

C++:在 vector 中插入什么 - 指针或引用, vector 何时复制其元素?

java - 这会造成内存泄漏吗?

ruby - 如何使用 Ruby 1.9 检测字符串是否仅包含拉丁符号?

ruby - 如何在非 SSL 或 http 网站上使用 Stripe?

java - for 循环中的内存管理和速度

performance - 标记扫描GC怎么了?

java - JVM 崩溃时 GC 日志被覆盖