出産前後の痔にはご注意!

Javaにガーベージコレクションってあるじゃん。重要そうなのですが、私の理解はイマイチです。ガーベージコレクションって何ですか?一言で言えば、ごみインスタンスなのかな。

以下は私独学の推測
インスタンスを作るとき、new Constructor();ってやるじゃん。だけど、これだけだとガーベージコレクションになって、そのうち自動的にインスタンスが消えるのかな?

インスタンスを残そうとすると、左辺が重要である。
◯ City tokyo=new City();(左辺=右辺;の形)
× new City();(右辺;の形で、左辺=を省略している)

恒久的インスタンスにしようとすると、左辺で変数のクラス型と変数名を指定して、右辺の受け皿(代入先)を用意する。City型のインスタンスを作るだけなら、左辺を省略してnew City();だけで十分。しかし、これだとガーベージコレクションになって、すぐ消える。

正しい?

このQ&Aに関連する最新のQ&A

A 回答 (4件)

ガベージコレクションは、メモリ管理機能です。


プログラム上で使用しなくなったオブジェクト(インスタン
ス)を探して、メモリ上から削除するという動作をします。


例えば、
 City tokyo=new City();
 tokyo = null;
というコードを書いた場合、tokyo = null; の実行後は City
オブジェクトは使われません(使えません)。このようなオブ
ジェクトはガベージコレクションが自動的に判別してメモリ
上から削除します。


また、例えば
if (hoge == 0) {
 City tokyo=new City();
}
というコードを書いた場合、if 文のスコープを抜けた後では
City オブジェクトは使われません(使えません)。このような
オブジェクトはガベージコレクションが自動的に判別してメ
モリ上から削除します。


このように、スコープを外れたり参照変数に null を突っ込ま
れたりして、どこからも参照されなくなった(使われなくなっ
た)オブジェクトを自動的に探してメモリ上から削除する機能
がガベージコレクションです。

※注意点として、ガベージコレクションは『オブジェクトが使
 われなくなったら即消す』ということはしません。JAVA の
 好きなタイミングで消します。
    • good
    • 0

一言でいえば、メモリリーク防止装置。



魚の目に水見えず、人の目に空見えず、Javaプログラマの目にガーベージコレクション見えず。ガーベージコレクションの重要性を知りたければ、一旦Javaを離れてガーベージコレクションがしていることを自分でやってみるのが良いでしょう。

ちょっとC言語を勉強し、malloc()を多用するプログラムを探してきてソースを読み、正常に処理するときもエラーが起きたときも間違うことなく全てのヒープメモリをfree()するために、C言語プログラマが細心の注意を払わなければならないことが実感できると、Javaのガーベージコレクションの便利さが見えてくると思います。
    • good
    • 0

ちょっと違いますね。


あなたの言う「ごみインスタンス」そのものではなくって、そのごみインスタンスを消すための仕組みがガーベージコレクションです。
これにはただインスタンスを消すだけじゃなくって、あるインスタンスを消してもいいかどうかを判断する機能も含まれます。

あと、細かいことですが、
> × new City();
> これだとガーベージコレクションになって、すぐ消える。
というのも間違いでです。
あるインスタンスがどこからも参照されていない状態になったとしても、それで即時に消されるとは限りません。あくまでも消されるかもしれないインスタンスになったというだけで、いつ消されるかはガーベージコレクションの都合によります。下手をするとプログラムが終了するまで残っている可能性もあります。
    • good
    • 0

塵拾いです。

不要になった細切れのエリヤをなるべく連続エリヤとして集めて再度のエリヤ要求に応えられるようにする作業。細切れの空きエリヤしかない状態で大きな連続エリヤを要求されると、それに応えるべく使用中のエリヤのデータを移動したりして大きな連続エリヤを確保しようとします。こういう事態が起こると数分間とか数十分間とかそれにかかりきりになる事も。PCなど事務用ならいいかも知れませんが、実時間制御のシステムでは使えません。飛行機なら墜落します。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このカテゴリの人気Q&Aランキング