【问题标题】:Ruby: Mark an object for garbage collectionRuby:标记垃圾收集的对象
【发布时间】:2011-02-08 07:37:39
【问题描述】:

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

感谢您的回答、cmets 和反馈!

【问题讨论】:

  • finalize 不会将对象标记为垃圾回收,它是一种在 GC 删除对象之前运行(尽管不能保证)的方法
  • 很高兴知道,感谢您指出这一点。是否有一种特定的方法可以显式地破坏对象或至少将其置于运动状态?我喜欢魔术,但我也喜欢了解暴露的技巧。
  • _why 用 Ruby 写了一篇很棒的关于 GC 的文章,名为“The Fully Upturned Bin”,幸运的是,当他决定从 Internet 上消失时得到了保存:viewsourcecode.org/why/hacking/theFullyUpturnedBin.html
  • 您只需要删除对对象 e 的所有引用。 G。如果您有一个引用 x,您只需将其设置为 null 或者您有一个局部变量,就会超出范围。如果没有引用一个对象,它对 GC 可用。

标签: ruby oop garbage-collection


【解决方案1】:

据我所知,您无法将对象标记为准备好进行 GC,但您可以随时强制 GC:

GC.start

如果项目可以被释放,它将被释放。

【讨论】:

  • 自从 MRI 1.9.3 引入惰性扫描 GC 后不再适用
  • 这部分仍然是正确的:“你不能标记一个对象准备好进行 GC”。 Ruby 使用相反的方法——可以到达的对象被标记为“不要删除”。标记阶段完成后,其他所有内容都将被释放。这没有改变,只是当你调用GC.start时不会立即发生
猜你喜欢
  • 2011-07-16
  • 1970-01-01
  • 1970-01-01
  • 2010-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多