2010-04-15 104 views
6

我在想Ruby是否有类似的.finalize()方法,标记它们已准备好进行垃圾回收。如果我要创建20,000个对象,并且每个实例都有一个计数器,我希望该对象在达到零时标记为垃圾收集。我知道这几乎是一种Java方法,但我并没有足够的经验来了解Ruby如何做得更好。Ruby:标记垃圾回收的对象

感谢您的回答,评论和反馈!

+2

finalize不标记垃圾回收的对象,它是在GC删除对象之前运行的一种方法(虽然没有保证) – pablochan 2010-04-15 10:20:05

+0

这很好,谢谢你指出。有没有明确的破坏物体的具体方法,或者至少把这个问题置于运动中?我喜欢魔术,但我也喜欢了解暴露的技巧。 – Shyam 2010-04-15 10:34:47

+1

你只需要删除对象e的所有引用。 G。如果你有一个引用x,你只需将它设置为null,或者你有一个局部变量,它就会超出范围。如果没有引用的对象,它可用于GC。 – pablochan 2010-04-15 15:36:51

回答

7

据我所知,你不能标记对象准备GC,但你可以随时强制GC:

GC.start 

如果该项目能够被释放,它会被释放。

+5

不再是真的,因为核磁共振成像1.9.3介绍了懒惰扫描GC – glebm 2012-11-21 14:52:11

+1

虽然这部分仍然如此:“你不能标记准备好GC的物体”。 Ruby使用相反的方法 - 可以到达的对象被标记为“不要删除”。标记阶段完成后,其他所有内容都将被释放。这并没有改变,只是在你调用GC.start时不会立即发生 – 2013-11-14 08:02:08