【问题标题】:Ruby garbage collection on anonymous classes using define_method使用 define_method 对匿名类进行 Ruby 垃圾回收
【发布时间】:2013-07-12 23:53:32
【问题描述】:

我正在尝试追踪state_machine gem 中的内存泄漏,当我开始使用匿名类per the README example 动态生成状态机时我开始注意到它。 This gist 展示了我最初是如何发现这个问题的。

我已经能够将问题缩小到在状态机 gem 中定义辅助方法的方式,我总结了 in this gist

我的问题是,define_method 块在做什么导致匿名类不被垃圾收集?评论这 3 行 (18-20) 似乎可以解决问题。

提前感谢您的任何指点。

更新:我使用的是 Ruby 2.0.0p195

【问题讨论】:

  • 很高兴知道您使用的是哪个 Ruby 实现。
  • 感谢您指出这一点。我正在使用 2.0.0p195。我已经更新了问题。

标签: ruby garbage-collection


【解决方案1】:

This article 解释了问题。

主要的缺点是 define_method 创建了一个闭包。闭包可以保存对大对象的引用,并且这些大对象永远不会被垃圾回收。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    相关资源
    最近更新 更多