假设有一个简单的对象,如下所示:
object = Object.new
据我所知,这会在内存(RAM)中创建一个对象。
有没有一种方法可以从内存中删除这个对象?
除了黑客攻击底层C代码之外,不行。垃圾回收由运行时管理,因此您不必担心它。这是关于Ruby 2.0算法的一个不错的参考。
一旦在内存中没有对对象的引用,垃圾回收器就会开始工作。你应该没问题。
简单地说,就是让GC(垃圾回收器)去执行它的工作。
当你准备好要摆脱该引用时,只需执行object = nil
。而不要引用object
。
垃圾回收器最终会收集并清除那个引用。
(from ruby site)
=== Implementation from GC
------------------------------------------------------------------------------
GC.start -> nil
GC.start(full_mark: true, immediate_sweep: true) -> nil
------------------------------------------------------------------------------
Initiates garbage collection, unless manually disabled.
This method is defined with keyword arguments that default to true:
def GC.start(full_mark: true, immediate_sweep: true); end
Use full_mark: false to perform a minor GC. Use immediate_sweep: false to
defer sweeping (use lazy sweep).
Note: These keyword arguments are implementation and version dependent. They
are not guaranteed to be future-compatible, and may be ignored if the
underlying implementation does not support them.
通常情况下,Ruby会自动处理垃圾回收。当然,在某些边缘情况下需要手动处理,但是在一般情况下,您不必担心Ruby应用程序的垃圾回收。
垃圾回收的实现细节因Ruby版本而异,但它只提供了很少的参数可以调整,对于大多数目的,您不需要它们。如果您发现自己面临内存压力,您可能需要重新评估设计决策,而不是试图管理过度内存消耗的症状。
通常情况下,Ruby在对象超出作用域或不再引用时标记其进行垃圾回收。但是,例如Symbol等一些对象永远不会被回收,并将持续运行您的程序的整个运行时间。
您可以使用GC#start手动触发垃圾回收,但无法像从Ruby中的C程序那样释放内存块。如果您发现自己需要这样做,您可能需要解决潜在的X / Y问题,而不是直接处理内存。