2013-07-12 28 views
1

我試圖追查我開始注意到當我開始動態生成狀態機使用匿名類per the README examplestate_machine gem內存泄漏。 This gist演示了我最初如何發現問題。匿名類使用define_method的Ruby垃圾回收

我已經能夠將問題縮小到幫助者方法在狀態機gem中定義的方式,我已經總結了in this gist

我的問題是,什麼是define_method塊這樣做會導致匿名類不被垃圾收集?評論這三條線(18-20)似乎解決了這個問題。

在此先感謝任何指針。

更新:我使用Ruby 2.0.0p195

+0

很高興知道您正在使用哪個Ruby實現。 – Gene

+0

謝謝你指出。我正在使用2.0.0p195。我已經更新了這個問題。 – jhuckabee

回答

1

This article說明問題。

主要的缺點是define_method創建一個閉包。閉包可以保存對大對象的引用,而那些大對象永遠不會被垃圾收集。