Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails ObjectSpace.each_对象(Foo).count_Ruby On Rails_Ruby_Heap Memory_Objectspace - Fatal编程技术网

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