Ruby 从仅从该数组/哈希引用的数组/哈希中删除对象 是否可以从仅从此数组/哈希引用的数组/哈希中删除对象?
我正在寻找的示例:Ruby 从仅从该数组/哈希引用的数组/哈希中删除对象 是否可以从仅从此数组/哈希引用的数组/哈希中删除对象?,ruby,object-reference,Ruby,Object Reference,我正在寻找的示例: some_array.reject!{|elm| ObjectSpace.only_one_reference_to?(elm)} 我正在制作一个脚本,它在内存中似乎正在快速增长。其原因是一个长期存在的数组,它可以在事件周围保留过时的对象,尽管它不需要这样做 问题主要在于: @@long_living_array = [] class Foo def initialize @@long_living_array << self e
some_array.reject!{|elm| ObjectSpace.only_one_reference_to?(elm)}
我正在制作一个脚本,它在内存中似乎正在快速增长。其原因是一个长期存在的数组,它可以在事件周围保留过时的对象,尽管它不需要这样做
问题主要在于:
@@long_living_array = []
class Foo
def initialize
@@long_living_array << self
end
end
a = Foo.new()
b = Foo.new()
a = nil
#Here is the problem, a sticks around in @@long_living_array, even though it does not really need to be there.
我发现它似乎做了一些类似的事情,但它是Ruby本身的补丁(一些C文件),因此我不可能使用它。您可以存储一个对象,而不是存储对象本身。它允许对引用的对象进行垃圾收集:
require 'weakref'
@@long_living_array = []
class Foo
def initialize
@@long_living_array << WeakRef.new(self)
end
end
a = Foo.new
b = Foo.new
@@long_living_array.count
#=> 2
a = nil # reassign 'a'
GC.start # start the garbage collector
@@long_living_array.keep_if(&:weakref_alive?) # remove GC'ed objects
@@long_living_array.count
#=> 1
需要“weakref”
@@长寿命数组=[]
福班
def初始化
@@长寿数组2
a=零#重新分配“a”
GC.start#启动垃圾收集器
@@长寿命数组。如果(&:weakref#u活着,请保持?)#移除GC'ed对象
@@long_living_array.count
#=> 1
weakref的好用例。酷!我会尽快尝试这个!
require 'weakref'
@@long_living_array = []
class Foo
def initialize
@@long_living_array << WeakRef.new(self)
end
end
a = Foo.new
b = Foo.new
@@long_living_array.count
#=> 2
a = nil # reassign 'a'
GC.start # start the garbage collector
@@long_living_array.keep_if(&:weakref_alive?) # remove GC'ed objects
@@long_living_array.count
#=> 1