• ベストアンサー

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

fujic-1990の回答

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

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

関連するQ&A

  • GOMプレーヤーについて教えて下さい。

    ITの専門学校でプログラミングを学んでいてフリーソフトを作ることに興味があります。 それでGOMプレーヤーのようなフリーソフトは一人で自作することは可能でしょうか? また、言語はJAVAやC#でできますか? 回答よろしくお願いします。

  • 動的確保について

    こんばんは。プログラミングについてお聞きしたい事があり 投稿させて頂きました。初心者なので見当違いでしたら申し訳 ありません。 現在、C言語でプログラムを作成しているのですが、メモリの 動的確保をする際、確保する領域の先頭アドレスを指定するという ことは出来ないのでしょうか。 現在はmallocを使用して領域を確保していますが、実験の都合上、 どうしても自分で確保すべき領域を指定したくなりました。 調べても分からないのでもしノウハウをお持ちの方がいましたら 教えて頂けますでしょうか。 宜しくお願い致します。

  • c言語のmalloc関数、またrealloc関数

    c言語のmalloc関数は確保するメモリの領域を、配列としてのみしか処理出来ないのですか。 つまり、malloc関数で確保したメモリの領域を変数、また多次元配列、また構造体としては処理出来ないのでしょうか。 c言語のrealloc関数は以前の確保したメモリの領域から、確保し直したメモリの領域の場所が変わるかもしれないという事ですが、この場合の場所が変わるという意味は、メモリの領域のアドレスが変わるという事でしょうか。 また、以前の確保したメモリの領域に代入していたデータが使用出来なくなるという事でしょうか。

  • C++の将来性・・・

    昨年まで、C++プログラマをしていました。しかし恥ずかしながらぜんぜんオブジェクト指向じゃないコードを書いていました・・・ いまJavaで仕事していて感じるのですが、C++にはガベージコレクションがないので、実はオブジェクト指向プログラミングがとてもやりにくい言語ではないですか? そうなると、C++の必然性がなくなり、C Java C# に取って代わられてC++は消え去っていく言語なのでしょうか。 「いやC++はすばらしいオブジェクト指向言語だ!」というお叱りを期待しています。

  • メモリを確保する方法(アセンブラにおけるORGの様な)ありませんか?

    PICボードの制御プログラミングをC言語で行っています。 通常は、コンパイラで自動的にメモリ領域の確保を行ってくれます。 そこをあえてプログラミングで操作したいのですが 何か良い方法がありましたら教えて下さい。 目的プログラムは、タイマ割り込みによるLEDの制御です。 組み込みソフトウェア開発の勉強中です。

  • c言語のメモリの確保について

    c言語で変数を宣言したり、領域を確保したりする場合に、メモリ上のこのアドレスに領域を確保する、といったように場所を指定することはできるのでしょうか?

  • javaとは?

    たまに「javaのアップデートをしてください」 という表示がでるのですが、javaを使うことによって何ができるのでしょうか? javaはプログラミング言語のひとつだと思っていたのですが、 インターネットをするにおいて、javaは必要な機能なのですか? javaのアップデートをしないとjavaで作られたサイトが見れないのでしょうか?

  • 使わなくなった変数に違う値を入れるのはマズイ?

    CやJAVAのような、厳密な型の存在しない言語(Perl、PHP、Javascriptなど)についての質問です。 プログラミングをしていて、途中である変数が要らなくなることがあります。これを、せっかく宣言したので別の値、それも型が違ったりプリミティブ型の値を入れてたのにオブジェクト型を入れるとか、そういう使い方をすることがあります。 例(Javascriptの場合) $hen = new Array(10); $hen[0] = 0; $hen[1] = 1; . . . for (i=0; i<10; i++) { print $hen[$i]; } //ここで配列henは要らなくなった。変わりに文字列が欲しい。 $hen = "String"; //せっかく変数henがあるので、これを入れ物として使う。 最近、C++の勉強をして、このようなケースで変数名との結びつきが無くなった変数の中身は、存在はするがアクセスする手段を失った「ゴミ」となるということを知りました。多くの言語も、同じような構造だとも知りましたが、同時に「ガベージコレクション」を装備している言語は、プログラムがその値が以降使われないと判断された場合は自動でその変数に割り当てているメモリを開放して処理速度向上を図る・・・とありました。では、例として挙げたケースでは、ガベージコレクションを装備していれば、ゴミは発生するがプログラムが自動でメモリを開放してくれるのでそこまで気にしなくても良い、という解釈で良いのでしょうか?私はPHPが得意なのですが、PHPは標準ではガベージコレクションを装備していないようなので、気をつけてプログラミングしようと思っているのですが。 余談ですが、「変数名と内容が一致しなくなるケースがある($arr = new Array();を後で$arr = "String";とするなど)からやめたほうが良い」という突っ込みはナシでお願いします。その点は承知していますので。

  • C言語におけるローカル変数が使用するメモリについて

    例のようなC言語のプログラムを動かした場合、 確保されるメモリ領域はどうなるのでしょうか。 例 #include <stdio.h> int main(void) { int a = 0; } このとき、変数aはint型なのでスタック領域に4バイトのメモリが確保されると理解しています。 と同時にaという変数名と確保されたスタック領域の番地を紐づけるようなメモリがどこかに確保されるのではないかと思ってるのですが、この理解で正しいでしょうか。 またその場合は変数aの番地はどの領域に確保されるのでしょうか。 ご教示お願いいたします。

  • プログラミング言語 rubyを用いて、

    プログラミング言語 rubyを用いて、 画像処理プログラミングを書こうとしていますが、以下の点が分かりません。 1・メモリの動的確保はどうするの?(C言語でいうmalloc) 2・ファイルから配列に展開するにはどうしたらいいの? 以上が分かればわかるきがするのですが・・ 当方 C言語での画像処理プログラミングはそれなりに経験があるのですが rubyで実現できるのかわからなくて・・

    • ベストアンサー
    • Ruby