QA@IT
«質問へ戻る

試験した Ruby のバージョン情報を追加

139
本文
 GC.start
 sleep 100
 ```
+
+実験した Ruby は以下の 2 つで、結果は同じでした。
+
+```
+$ ruby1.8 -v
+ruby 1.8.7 (2012-02-08 patchlevel 358) [x86_64-linux]
+$ ruby1.9.1 -v
+ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
+```

Ruby のオブジェクトが GC されるタイミング

Ruby でオブジェクトが GC されるタイミングを調べています。

実験のため、http://www.ruby-lang.org/ja/old-man/html/ObjectSpace.html に記載されている ObjectSpace.define_finalizer の良い例の最後に sleep 100 を追加した次のようなコードを書いて実行してみたのですが、sleep 100 が終わるまで Bar.callback が実行されません。Bar.new で Bar のオブジェクトが生成され、どこからも参照されていないのですぐに GC 対象になると思うのですが、何故 GC.start で GC されないのでしょうか。

#!/usr/bin/env ruby

class Bar
  def Bar.callback
    proc {
      puts "bar"
    }
  end
  def initialize
    ObjectSpace.define_finalizer(self, Bar.callback)
  end
end
Bar.new
GC.start
sleep 100

実験した Ruby は以下の 2 つで、結果は同じでした。

$ ruby1.8 -v
ruby 1.8.7 (2012-02-08 patchlevel 358) [x86_64-linux]
$ ruby1.9.1 -v
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
Ruby でオブジェクトが GC されるタイミングを調べています。

実験のため、http://www.ruby-lang.org/ja/old-man/html/ObjectSpace.html に記載されている `ObjectSpace.define_finalizer` の良い例の最後に `sleep 100` を追加した次のようなコードを書いて実行してみたのですが、`sleep 100` が終わるまで `Bar.callback` が実行されません。`Bar.new` で Bar のオブジェクトが生成され、どこからも参照されていないのですぐに GC 対象になると思うのですが、何故 `GC.start` で GC されないのでしょうか。

```ruby
#!/usr/bin/env ruby

class Bar
  def Bar.callback
    proc {
      puts "bar"
    }
  end
  def initialize
    ObjectSpace.define_finalizer(self, Bar.callback)
  end
end
Bar.new
GC.start
sleep 100
```

実験した Ruby は以下の 2 つで、結果は同じでした。

```
$ ruby1.8 -v
ruby 1.8.7 (2012-02-08 patchlevel 358) [x86_64-linux]
$ ruby1.9.1 -v
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
```

タイトルを少し修正

139
タイトル
Ruby のオブジェクトの GC されるタイミング
Ruby のオブジェクトが GC されるタイミング

Ruby のオブジェクトが GC されるタイミング

Ruby でオブジェクトが GC されるタイミングを調べています。

実験のため、http://www.ruby-lang.org/ja/old-man/html/ObjectSpace.html に記載されている ObjectSpace.define_finalizer の良い例の最後に sleep 100 を追加した次のようなコードを書いて実行してみたのですが、sleep 100 が終わるまで Bar.callback が実行されません。Bar.new で Bar のオブジェクトが生成され、どこからも参照されていないのですぐに GC 対象になると思うのですが、何故 GC.start で GC されないのでしょうか。

#!/usr/bin/env ruby

class Bar
  def Bar.callback
    proc {
      puts "bar"
    }
  end
  def initialize
    ObjectSpace.define_finalizer(self, Bar.callback)
  end
end
Bar.new
GC.start
sleep 100
Ruby でオブジェクトが GC されるタイミングを調べています。

実験のため、http://www.ruby-lang.org/ja/old-man/html/ObjectSpace.html に記載されている `ObjectSpace.define_finalizer` の良い例の最後に `sleep 100` を追加した次のようなコードを書いて実行してみたのですが、`sleep 100` が終わるまで `Bar.callback` が実行されません。`Bar.new` で Bar のオブジェクトが生成され、どこからも参照されていないのですぐに GC 対象になると思うのですが、何故 `GC.start` で GC されないのでしょうか。

```ruby
#!/usr/bin/env ruby

class Bar
  def Bar.callback
    proc {
      puts "bar"
    }
  end
  def initialize
    ObjectSpace.define_finalizer(self, Bar.callback)
  end
end
Bar.new
GC.start
sleep 100
```

質問を投稿

Ruby のオブジェクトの GC されるタイミング

Ruby でオブジェクトが GC されるタイミングを調べています。

実験のため、http://www.ruby-lang.org/ja/old-man/html/ObjectSpace.html に記載されている ObjectSpace.define_finalizer の良い例の最後に sleep 100 を追加した次のようなコードを書いて実行してみたのですが、sleep 100 が終わるまで Bar.callback が実行されません。Bar.new で Bar のオブジェクトが生成され、どこからも参照されていないのですぐに GC 対象になると思うのですが、何故 GC.start で GC されないのでしょうか。

#!/usr/bin/env ruby

class Bar
  def Bar.callback
    proc {
      puts "bar"
    }
  end
  def initialize
    ObjectSpace.define_finalizer(self, Bar.callback)
  end
end
Bar.new
GC.start
sleep 100
Ruby でオブジェクトが GC されるタイミングを調べています。

実験のため、http://www.ruby-lang.org/ja/old-man/html/ObjectSpace.html に記載されている `ObjectSpace.define_finalizer` の良い例の最後に `sleep 100` を追加した次のようなコードを書いて実行してみたのですが、`sleep 100` が終わるまで `Bar.callback` が実行されません。`Bar.new` で Bar のオブジェクトが生成され、どこからも参照されていないのですぐに GC 対象になると思うのですが、何故 `GC.start` で GC されないのでしょうか。

```ruby
#!/usr/bin/env ruby

class Bar
  def Bar.callback
    proc {
      puts "bar"
    }
  end
  def initialize
    ObjectSpace.define_finalizer(self, Bar.callback)
  end
end
Bar.new
GC.start
sleep 100
```