• ベストアンサー

ガベージコレクションをノートと消しゴムに例えると

Javaとかのプログラミング言語には「ガベージコレクション」という機能がありますが、この機能を「ノート」と「消しゴム」に例えると・・・ 「ノート」→「メモリ」 「消しゴム」→「ガベージコレクション」 上記のように例えると、「ノートに書いてある邪魔になった不要な箇所の落書きを消しゴムで消して、書ける空白の領域を確保する」というイメージでよろしいのでしょうか?(おおまかな例えですが・・・) 回答のほうよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • unokwave
  • ベストアンサー率58% (966/1654)
回答No.4

使用中領域を纏めて詰める処理はコンパクションと言い、ガベージコレクションというゴミ集め処理のついでに行われる処理系もありますが、厳密には別です。 本来の質問ですが、「ノートに書いてある邪魔になった不要な箇所の落書きを消しゴムで消して、書ける空白の領域を確保する」のうち「落書き」→「書き込み」への変更と、「邪魔になった」を削除すればその解釈で良いと思います。 書かれている内容が落書きなのか重要な情報であるかはガベージコレクションにとって関知しない事で、邪魔なのかも関知していないことで、他の用途に利用できるよう処理する事が仕事だからです。 メモリ領域を管理している札があって、その札を未記入の新しい物に変えるだけ、という簡単な物もあれば、セキュリティが絡むので開放する領域の内容をすべて消している物もあります。

その他の回答 (4)

  • notnot
  • ベストアンサー率47% (4900/10359)
回答No.5

一度回答したのですが、いいたとえを思いついたので、再度です。 ガベージコレクションは直訳すると「ごみ集め」です。 散らかった部屋があるとすると、どれを残して、どれを捨てるかを決めて、捨てるものをゴミ袋に詰めるのが、ガベージコレクションです。 そのあと、そのゴミ袋をゴミ回収に出すのが、ノートのたとえの消しゴムですね。

  • asciiz
  • ベストアンサー率70% (6826/9706)
回答No.3

>「ノートに書いてある邪魔になった不要な箇所の落書きを消しゴムで消して、書ける空白の領域を確保する」 微妙に違いますかね…ガベージコレクションをしても、現在確保されているメモリ量は変わりません。 すなわち、空き領域(の総量)が増えるわけではありません。 メモリがノートだとして、鉛筆と消しゴムで情報を書いたり消したりしている、それが普段の作業です。消しゴムも、普段から使っています。 ただ、必要な情報をいくつも書いて、その中から不要な所を消し、また必要な情報を書いて…としていくと、メモリ(紙面)が分断され、大きな空白が無くなってきます。 しまいには、紙面の所々に小さな空白はあるけども、大きな配列は確保できない状態となってしまいますね。 そこで、現在ある情報をノートの頭からきっちり詰めるように書き直し、大きな空白を確保する、この作業が、ガベージコレクションです。 ガベージコレクションを実行する前後でメモリの空き領域は変わらないのですが、ガベージコレクション前には確保できなかった大きな配列が確保できるようになります。 私のイメージだとそんな感じですね。

  • fujic-1990
  • ベストアンサー率55% (4505/8062)
回答No.2

 ガーベジコレクションとは、『プログラムが動作するときに使っていたメモリー領域を、使用しなくなった時に自動的に解放する機能のこと』(パソコン用語事典)です。  プログラムは、動いている時に、例えば計算領域としてメモリーの一定部分をあらかじめ確保してしまう(他のプログラムには使わせない!)わけです。で、複数のプログラムを同時に動かすと、メモリーの余裕部分がドンドン減ってしまうわけです。  そうするとどれかのプログラムが動かなくなるので、当面使わないでいるメモリー領域を「どのプログラムが、何につかってもいい場所」として自動的に解放してしまう機能が備えられているわけです。  書き込まれている内容を消してしまってもいい場合もあるでしょうが、いま使っている領域の内容を消してしまっては、消されたプログラムが働けなくなる場合も出てきます。だから、基本的にはすでに書かれている内容は消さず、その部分はガーベジコレクションの対象外にすると思います。  つまりこれを例えれば、先生(Java)がそうしなさいと言うから、私が自分用に確保したルーズリーフノートの白紙ページをはずして、あとで私が困るかも知れないけどそれは覚悟して、書き込む白紙ページがなくて今現在困っている質問者さんに貸す、というようなイメージですかね。  消していいのか、貸して良いのか、などなどの判断基準は、あらかじめJavaやC#の本体に書き込まれているはずです。

  • notnot
  • ベストアンサー率47% (4900/10359)
回答No.1

ガベージコレクションは、メモリのどの部分をまだ使っているか、どの部分をもう使わないので再利用しているか、を決めるものです。 なので、消しゴムじゃなくて、「書いてある物を読んで要不要を判断する」という部分がガベージコレクションの肝です。 消しゴムで消すことはガベージコレクションの後始末ですね。

関連するQ&A

専門家に質問してみよう