- ベストアンサー
ガーベージコレクションとは?
- ガーベージコレクションとは、Javaにおいて不要なインスタンスを自動的に解放する仕組みです。
- 通常、new演算子でオブジェクトを生成すると、ガーベージコレクションによって不要なインスタンスが自動的に解放されます。
- インスタンスを残す場合は、変数にオブジェクトを代入したり、変数のスコープを広げることでインスタンスがガーベージコレクションの対象から外れます。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
ガベージコレクションは、メモリ管理機能です。 プログラム上で使用しなくなったオブジェクト(インスタン ス)を探して、メモリ上から削除するという動作をします。 例えば、 City tokyo=new City(); tokyo = null; というコードを書いた場合、tokyo = null; の実行後は City オブジェクトは使われません(使えません)。このようなオブ ジェクトはガベージコレクションが自動的に判別してメモリ 上から削除します。 また、例えば if (hoge == 0) { City tokyo=new City(); } というコードを書いた場合、if 文のスコープを抜けた後では City オブジェクトは使われません(使えません)。このような オブジェクトはガベージコレクションが自動的に判別してメ モリ上から削除します。 このように、スコープを外れたり参照変数に null を突っ込ま れたりして、どこからも参照されなくなった(使われなくなっ た)オブジェクトを自動的に探してメモリ上から削除する機能 がガベージコレクションです。 ※注意点として、ガベージコレクションは『オブジェクトが使 われなくなったら即消す』ということはしません。JAVA の 好きなタイミングで消します。
その他の回答 (3)
一言でいえば、メモリリーク防止装置。 魚の目に水見えず、人の目に空見えず、Javaプログラマの目にガーベージコレクション見えず。ガーベージコレクションの重要性を知りたければ、一旦Javaを離れてガーベージコレクションがしていることを自分でやってみるのが良いでしょう。 ちょっとC言語を勉強し、malloc()を多用するプログラムを探してきてソースを読み、正常に処理するときもエラーが起きたときも間違うことなく全てのヒープメモリをfree()するために、C言語プログラマが細心の注意を払わなければならないことが実感できると、Javaのガーベージコレクションの便利さが見えてくると思います。
- hitomura
- ベストアンサー率48% (325/664)
ちょっと違いますね。 あなたの言う「ごみインスタンス」そのものではなくって、そのごみインスタンスを消すための仕組みがガーベージコレクションです。 これにはただインスタンスを消すだけじゃなくって、あるインスタンスを消してもいいかどうかを判断する機能も含まれます。 あと、細かいことですが、 > × new City(); > これだとガーベージコレクションになって、すぐ消える。 というのも間違いでです。 あるインスタンスがどこからも参照されていない状態になったとしても、それで即時に消されるとは限りません。あくまでも消されるかもしれないインスタンスになったというだけで、いつ消されるかはガーベージコレクションの都合によります。下手をするとプログラムが終了するまで残っている可能性もあります。
- kngj1740
- ベストアンサー率18% (197/1052)
塵拾いです。不要になった細切れのエリヤをなるべく連続エリヤとして集めて再度のエリヤ要求に応えられるようにする作業。細切れの空きエリヤしかない状態で大きな連続エリヤを要求されると、それに応えるべく使用中のエリヤのデータを移動したりして大きな連続エリヤを確保しようとします。こういう事態が起こると数分間とか数十分間とかそれにかかりきりになる事も。PCなど事務用ならいいかも知れませんが、実時間制御のシステムでは使えません。飛行機なら墜落します。