私は理解しようとしていますObjectSpace.each_object
コンソールで:
class Foo; end
Foo.new
ObjectSpace.each_object(Foo).count
=> 1
GC.start
ObjectSpace.each_object(Foo).count
=> 1
例を見てきましたが、2 番目のカウントは 0 であるべきだとわかってい
ます。
ありがとう。
私は理解しようとしていますObjectSpace.each_object
コンソールで:
class Foo; end
Foo.new
ObjectSpace.each_object(Foo).count
=> 1
GC.start
ObjectSpace.each_object(Foo).count
=> 1
例を見てきましたが、2 番目のカウントは 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
and を使用して、最後の結果と最後から 2 番目の結果にアクセスでき_
ます__
。
[1] pry(main)> 'a'
=> "a"
[2] pry(main)> 'b'
=> "b"
[3] pry(main)> p _, __
"b"
"a"
=> ["b", "a"]
_out_
Pry は、 Pry::HistoryArrayに最後の 100 件の結果をすべて保存します。
[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>
_out_.pop!
最後の要素を削除するために使用できます:
[1] pry(main)> class Foo; end
=> nil
[2] pry(main)> Foo.new
=> #<Foo:0x007fa90b1ad360>
[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)> 5.times{_out_.pop!}
=> 5
[7] pry(main)> GC.start
=> nil
[8] pry(main)> ObjectSpace.each_object(Foo).count
=> 0
実行すると:
class Foo; end
Foo.new
p ObjectSpace.each_object(Foo).count
GC.start
p ObjectSpace.each_object(Foo).count
スクリプト内では、次のようになります。
1
0
GC.start
ガベージ コレクタを強制的に開始しません。
ドキュメントからは少しわかりにくいですが、エンジンにガベージ コレクションをスケジュールするように指示するだけです。GC.start
とは言っても、ヒープからオブジェクトをすぐに削除することに頼ることはできません。