问题标签 [yarv]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby - 如何在 Ruby 中分析垃圾收集
我正在尝试在非 Rails 应用程序中分析 GC,最好使用 YARV Ruby。
perftools.rb 告诉我,我的大部分 CPU 时间都花在了garbage_collector (6061 (61.4%)) 上。
我还可以使用 perftools.rb 获取哪些方法创建了多少对象。有些方法比其他方法创建更多的对象,但它并没有极度倾斜。
我从这里去哪里?是否有可能获得有关为什么要花这么多时间进行 GC 的更详细信息?是否可以查看是否花费了时间来摆脱对象,或者是否花费了检查对象是否应该被垃圾收集?
我可以访问 OS X Lion、Windows 7 和 Ubuntu 12.04。
ruby - ruby --dump 中显示的信息在运行时是否可用?
在你不知道 Ruby 可以做的 10 件事中,幻灯片 30,James Edward Gray II 提到
产生
这里输出的信息在运行时可用吗?如果是这样,这些信息是否仅代表已写下的代码,还是包含已完成的任何元编程的结果?
ruby - Rubinus 或 MRI 1.9.3 (YARV)?
所以,我有几个问题要问,我确实浏览了互联网,但没有太多可靠的答案。大多数博客文章会相互抵消,因为它们都赞扬了不同的事物并且有基准来“证明他们的观点”(我一生中从未见过这么多相互矛盾的基准)。
无论如何,我的问题是:
- 鲁比尼乌斯真的更快吗?这个明显诚实的亲鲁比尼乌斯的演讲给我留下了深刻的印象。让我有点困惑的另一件事是,很多 Rubinius 是用 Ruby 本身编写的,但不知何故它比 C-Ruby 更快?那么,它一定是该语言的一个非常好的实现!
- EventMachine 可以与 Ruinius 一起使用吗?据我所知,EventMachine 部分依赖于 Fibers(如果我错了,请纠正我),直到 1.9 才实现。我知道 Rubinius 最终也会支持 1.9。我不介意稍等。
- C 扩展在 Rubinius 中有效吗?我编写了一个 C 扩展,它将从 TCP 流接收到的二进制消息“序列化”为 Ruby 对象,反之亦然(我认为细节并不重要,但如果它有助于回答这个问题,我会更新帖子)。这可能是很多消息!我设法用 Ruby 编写了相同的代码(尽管一个月后它变得毫无意义),但事实证明它是应用程序中的一个真正瓶颈。所以,我不得不使用 C 作为我的问题的“解决方案”。 编辑:我只记得,我将 C 用于另一项任务,它是数组的命中测试方法。基本上它只是检查一个“点”是否在一个多边形内,在 CRuby 中它是不可能慢的。
- 如果之前的答案是“否”,那么 Rubinus 中是否有 C 扩展的替代方案?我收集 VM 是用 C++ 编写的,所以那样。
一些“奖励”问题:
- C-Ruby(2.0+,YARV)会摆脱 GIL 吗?或者至少修改它以使 CRuby 支持真正的并行性?
- mruby到底是什么?我看到 matz 正在研究它,就描述而言,它看起来非常棒。它与 CRuby(性能方面)有何不同?
我为我向你发动的这场文字风暴道歉!♥
ruby - Ruby 2.0 字节码导出/导入
我一直在阅读ruby 2.0 的新特性,发现它将支持字节码导入/导出:
Ruby 2.0 有望简化将预编译的 Ruby 脚本保存为字节码表示,然后直接运行这些脚本。
我已经安装了 ruby-2.0.0-p0,但是我没有找到任何关于如何导出字节码的信息(或者关于这个问题的一般文档)。此功能是否已经实现,如果是,我该如何使用它?
我也想知道一些细节。YARV 字节码是否应该与平台无关?是否所有 gem 都自动包含在字节码中?
ruby - GC.disable 的任何性能劣势?
是否有任何情况GC.disable
会降低性能?只要我使用真正的 RAM 而不是交换内存,可以这样做吗?
我正在使用 MRI Ruby 2.0,据我所知,它是 64 位的,并且使用的是 64 位的 Ubuntu:
ruby - MRI Ruby 2.0 中的 GC.start 有多彻底?
在 MRI Ruby 2.0 中,有多彻底GC.start
?
它是否尝试垃圾收集不再引用它们的所有对象?或者如果它认为有必要,它是否只 GC 对象?
我正在尝试跟踪我拥有的某个类的对象数量,尽管我认为某些对象不再引用它们,但它似乎还在继续增加。使用GC.start
并不能解决这个问题。我不使用任何 C 扩展,所以这不会使事情复杂化。
编辑:我遇到的问题与1.9.2-p180 中的 Ruby Symbol#to_proc 泄漏引用相同?- 当我认为它们应该被垃圾收集时,对象仍然存在,就像在那种情况下,问题与使用隐式Symbol
->有关Proc
。但是,很高兴知道是否GC.start
应该对所有对象进行垃圾收集,或者仅收集 MRI 认为垃圾收集所必需的任何内容。
java - 返回可达对象的 Java 方法
以下 Ruby 方法是否有 Java 等价物?
ObjectSpace.reachable_objects_from:此方法返回从给定对象可直接访问的所有对象。
参考:在以下文档中查找 ObjectSpace.reachable_objects_from http://globaldev.co.uk/2013/03/ruby-2-0-0-in-detail/
c++ - 惰性符号绑定失败:未找到符号
我的项目中有三个头文件,它们描述对象Rational
、Complex
和RubyObject
. 前两个是模板。所有这些都可以使用在头文件中定义的复制构造函数进行相互转换——除了那些在源文件中定义的构造Rational
和Complex
from s 的构造函数。const RubyObject&
注意:这些定义是必要的。如果它们都进入标题,您将获得循环依赖。
不久前,我在源文件中定义的两个复制构造函数遇到了一些未解决的符号错误。我能够在源文件中包含以下功能
然后从主源文件中的库入口点调用nm_init_data()
。这样做会强制这些符号正确链接。
不幸的是,我最近升级了 GCC,错误又回来了。事实上,它似乎发生在与 GCC 4.6 稍有不同的地方(例如,在 Travis-CI 上)。
但这不是特定于版本的问题(正如我之前所想的那样)。我们在Travis CI 的基于 Ubuntu 的系统上看到它,该系统运行 GCC 4.6。但是我们在带有 GCC 4.8.1 或 4.8.2 的 Ubuntu 机器上看不到它。但我们确实在装有 4.8.2 的 Mac OS X 机器上看到它——而不是装有 4.7.2 的同一台机器。关闭优化似乎也无济于事。
如果我nm
在我的库上运行,符号肯定是未定义的:
我不确定为什么有两个从属于未定义符号的已定义条目,但我也不太了解编译器。
看起来复制构造函数对于每个版本的Rational
模板都是一个未定义的符号:
“嗯,这很奇怪,”我想。“Complex64
并且Complex128
也在该nm_init_data
函数中被调用,但它们都正确解析 - 并且未在nm -u
输出中列出。” 所以我也尝试volatile
在 Rational 复制构造之前添加,认为编译器可能正在优化我们不想优化的东西。但这也没有解决问题,遗憾的是。这样做了,但需要注意的是:
需要注意的是,现在我得到了完全相同的错误,但是对于 Complex 对象。啊!
这是完全荒谬的。以下是这两个函数的定义,与函数在同一个源文件中nm_init_data()
:
提示:nm_init_data()
值得一提的是,在调用时(即加载库时)不会发生错误。它发生在很久以后,在另一个调用这些麻烦的函数期间。
我如何一劳永逸地解决这个问题,其他人喜欢它?
ruby - 如何存储和读取 RubyVM::InstructionSequence?
有没有办法将 RubyVM::InstructionSequence 存储到文件中并稍后读取?
我试过Marshal.dump
没有成功。我收到以下错误:
ruby - Ruby 字节码调试器
我已经能够使用RubyVM::InstructionSequence#disassemble
.
现在我想逐条调试代码指令。
有没有让我这样做的调试器?
问候