「ガベージコレクション」を編集中
ナビゲーションに移動
検索に移動
この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 | 編集中の文章 | ||
1行目: | 1行目: | ||
− | '''ガベージコレクション''' | + | '''ガベージコレクション'''(英語:garbage collection、略称:[[GC]])とは、[[プログラム]]で動的に確保したメモリ領域のうち、不要になったものを自動的に解放する機構のことである。 |
== 概要 == | == 概要 == | ||
6行目: | 6行目: | ||
人間は必ずミスをするものであり、たとえ[[天才プログラマー]]であっても[[プログラム]]が巨大化するにつれ、[[メモリリーク]]は必ずと言っていいほど発生する。ガベージコレクションはそのような問題を回避するために考えられたもので、[[ライブラリ]]、または[[ランタイム]]によって使い終わった[[メモリ]]を自動的に解放する機構を提供する。 | 人間は必ずミスをするものであり、たとえ[[天才プログラマー]]であっても[[プログラム]]が巨大化するにつれ、[[メモリリーク]]は必ずと言っていいほど発生する。ガベージコレクションはそのような問題を回避するために考えられたもので、[[ライブラリ]]、または[[ランタイム]]によって使い終わった[[メモリ]]を自動的に解放する機構を提供する。 | ||
− | [[C言語]]などで使われている[[ライブラリ]]実装のものは、[[ソースコード]]が若干煩雑になる傾向がある。なお、[[C++]]の[[Boost]]や、[[Boost]] | + | [[C言語]]などで使われている[[ライブラリ]]実装のものは、[[ソースコード]]が若干煩雑になる傾向がある。なお、[[C++]]の[[Boost]]や、[[Boost]]から取り込まれたC[[++11]](旧[[C++0x]])の[[スマートポインター]]はこの点が大幅に改善している。 |
[[.NET]]や[[Java]]、[[PHP]]で使われている[[ランタイム]]実装のものは、[[プログラム]]([[プロジェクト]])が小規模なうちは[[プログラマー]]は特に何も考える必要がなく、非常に手軽である。 | [[.NET]]や[[Java]]、[[PHP]]で使われている[[ランタイム]]実装のものは、[[プログラム]]([[プロジェクト]])が小規模なうちは[[プログラマー]]は特に何も考える必要がなく、非常に手軽である。 | ||
21行目: | 21行目: | ||
また、ガベージコレクションの処理が重すぎる「[[ストップ・ザ・ワールド]]」なる現象も問題となることが多い。ゴミ収集が回ってきた(動いた)瞬間に[[コンピューター]]が超高負荷になり、まるで[[フリーズ]]したかのような状態になり、処理が終わると何事もなかったかのように動き出す、というものである。 | また、ガベージコレクションの処理が重すぎる「[[ストップ・ザ・ワールド]]」なる現象も問題となることが多い。ゴミ収集が回ってきた(動いた)瞬間に[[コンピューター]]が超高負荷になり、まるで[[フリーズ]]したかのような状態になり、処理が終わると何事もなかったかのように動き出す、というものである。 | ||
− | この[[ストップ・ザ・ワールド]]なる現象は、24時間365日止まってはいけない[[サーバー]] | + | この[[ストップ・ザ・ワールド]]なる現象は、24時間365日止まってはいけない[[サーバー]]などで突如数十秒間の一時停止が発生し、問題になることが多い。 |
最近では[[ストップ・ザ・ワールド]]を回避する新しい方式も登場してきている。 | 最近では[[ストップ・ザ・ワールド]]を回避する新しい方式も登場してきている。 | ||
35行目: | 35行目: | ||
;[[世代別ガベージコレクション]] | ;[[世代別ガベージコレクション]] | ||
:[[マークアンドスイープ]]と[[コピーGC]]のハイブリッド方式。[[メモリ]]が使われ始めてからの経過時間や、確保されたメモリサイズなどでグループを分け(このグループを「世代」という)、それぞれに異なるGC方式を適用するというもの。 | :[[マークアンドスイープ]]と[[コピーGC]]のハイブリッド方式。[[メモリ]]が使われ始めてからの経過時間や、確保されたメモリサイズなどでグループを分け(このグループを「世代」という)、それぞれに異なるGC方式を適用するというもの。 | ||
+ | |||
+ | {{stub}} | ||
== 主なガベージコレクション実装 == | == 主なガベージコレクション実装 == | ||
{{stub}} | {{stub}} | ||
− | |||
− | |||
− | |||
− | |||
== 関連項目 == | == 関連項目 == |