使用define_method在匿名类上进行Ruby垃圾回收

时间:2013-07-12 04:35:46

标签: ruby garbage-collection

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

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

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

提前感谢任何指示。

更新:我正在使用Ruby 2.0.0p195

1 个答案:

答案 0 :(得分:1)

This article解释了这个问题。

  

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