28

次のような単純なオブジェクトがあるとします。

object = Object.new

私が知っているように、これはオブジェクトをメモリ(RAM)に作成します。

このオブジェクトを RAM から削除する方法はありますか?

4

4 に答える 4

29

基礎となる C コードをハッキングする以外は、いいえ。ガベージ コレクションはランタイムによって管理されるため、心配する必要はありません。これは、Ruby 2.0 のアルゴリズムに関する適切なリファレンスです。

メモリ内のオブジェクトへの参照がなくなると、ガベージ コレクターが機能します。あなたは大丈夫なはずです。

于 2013-10-22T16:20:20.880 に答える
8

Ruby はガベージ コレクションを自動的に管理します

ほとんどの場合、Ruby はガベージ コレクションを自動的に処理します。もちろん、特殊なケースもいくつかありますが、一般的なケースでは、典型的な Ruby アプリケーションではガベージ コレクションについて心配する必要はありません。

ガベージ コレクションの実装の詳細は、Ruby のバージョンによって異なりますが、いじるノブはほとんど公開されておらず、ほとんどの目的では必要ありません。メモリ不足に陥っている場合は、過剰なメモリ消費の症状を管理しようとするのではなく、設計上の決定を再評価することをお勧めします。

ガベージ コレクションを手動でトリガーする

一般的に言えば、Ruby は、オブジェクトがスコープ外になるか、参照されなくなったときに、ガベージ コレクションの対象としてマークを付けます。ただし、シンボルなどの一部のオブジェクトは収集されず、プログラムの実行時間全体にわたって存続します。

GC#startを使用して手動でガベージ コレクションをトリガーすることはできますが、Ruby 内から C プログラムを使用する場合のようにメモリ ブロックを実際に解放することはできません。これを行う必要がある場合は、メモリを直接管理しようとするのではなく、根本的な X/Y 問題を解決することをお勧めします。

于 2013-10-22T16:33:38.820 に答える
5

オブジェクトを明示的に破棄することはできません。Ruby には自動メモリ管理機能があります。どこからも参照されなくなったオブジェクトは、インタープリターに組み込まれているガベージ コレクターによって自動的に収集されます。

割り当てを賢く行う方法と、微調整に使用できるいくつかのツールについて読むには良い記事です。

http://merbist.com/2010/07/29/object-allocation-why-you-should-care/

于 2013-10-22T16:27:29.557 に答える