Ruby on rails ObjectSpace.each_对象(Foo).count
我正在试图找出对象空间。每个对象 在控制台中:Ruby on rails ObjectSpace.each_对象(Foo).count,ruby-on-rails,ruby,heap-memory,objectspace,Ruby On Rails,Ruby,Heap Memory,Objectspace,我正在试图找出对象空间。每个对象 在控制台中: class Foo; end Foo.new ObjectSpace.each_object(Foo).count => 1 GC.start ObjectSpace.each_object(Foo).count => 1 我看过一些例子,我知道第二个计数应该是0。 你知道这是怎么回事吗? 谢谢。这取决于您的主机 内部评级 最后一个结果将保存为。,即使没有明确指定。 运行GC.start不会删除最后一个对象:
class Foo; end
Foo.new
ObjectSpace.each_object(Foo).count
=> 1
GC.start
ObjectSpace.each_object(Foo).count
=> 1
我看过一些例子,我知道第二个计数应该是0。你知道这是怎么回事吗?
谢谢。这取决于您的主机 内部评级 最后一个结果将保存为
。
,即使没有明确指定。
运行GC.start
不会删除最后一个对象:
irb(main):001:0> class Foo; end
=> nil
irb(main):002:0>
irb(main):003:0* Foo.new
=> #<Foo:0x007fca7a309f98>
irb(main):004:0> p ObjectSpace.each_object(Foo).count; GC.start; p ObjectSpace.each_object(Foo).count
1
1
=> 1
irb(main):005:0> p ObjectSpace.each_object(Foo).count; GC.start; p ObjectSpace.each_object(Foo).count
1
0
=> 0
Pry将最后100个结果保存在\u out\u
Pry::HistoryArray:
[1] pry(main)> class Foo; end
=> nil
[2] pry(main)> Foo.new
=> #<Foo:0x007fd093102118>
[3] pry(main)> ObjectSpace.each_object(Foo).count
=> 1
[4] pry(main)> GC.start
=> nil
[5] pry(main)> ObjectSpace.each_object(Foo).count
=> 1
[6] pry(main)> _out_[2]
=> #<Foo:0x007fd093102118>
在脚本中
如果您执行:
class Foo; end
Foo.new
p ObjectSpace.each_object(Foo).count
GC.start
p ObjectSpace.each_object(Foo).count
在脚本中,您可以获得:
1
0
不会强制垃圾收集器启动
文档中有点不清楚,但它只是指示引擎安排垃圾收集。也就是说,不能依赖于GC。start会立即从堆中删除对象。为什么is count应该是0?@cfёёыы:因为Foo.new没有分配给任何变量。根据控制台的不同,它可能是够不着的,随时可以被垃圾收集。感谢您对out的解释!我有一种和它的安慰有关的感觉。我的荣幸。事实上,我以前从未听说过
\u out.
,我知道这一点。非常感谢。
class Foo; end
Foo.new
p ObjectSpace.each_object(Foo).count
GC.start
p ObjectSpace.each_object(Foo).count
1
0