「ガベージコレクション」を編集中

ナビゲーションに移動 検索に移動

警告: ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。ログインまたはアカウントを作成すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。

この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。

最新版 編集中の文章
1行目: 1行目:
'''ガベージコレクション'''([[英語]]:garbage collection、略称:[[GC]])とは、[[プログラム]]で動的に確保したメモリ領域のうち、不要になったものを自動的に解放する機構のことである。
+
'''ガベージコレクション'''(英語:garbage collection、略称:[[GC]])とは、[[プログラム]]で動的に確保したメモリ領域のうち、不要になったものを自動的に解放する機構のことである。
  
 
== 概要 ==
 
== 概要 ==
6行目: 6行目:
 
人間は必ずミスをするものであり、たとえ[[天才プログラマー]]であっても[[プログラム]]が巨大化するにつれ、[[メモリリーク]]は必ずと言っていいほど発生する。ガベージコレクションはそのような問題を回避するために考えられたもので、[[ライブラリ]]、または[[ランタイム]]によって使い終わった[[メモリ]]を自動的に解放する機構を提供する。
 
人間は必ずミスをするものであり、たとえ[[天才プログラマー]]であっても[[プログラム]]が巨大化するにつれ、[[メモリリーク]]は必ずと言っていいほど発生する。ガベージコレクションはそのような問題を回避するために考えられたもので、[[ライブラリ]]、または[[ランタイム]]によって使い終わった[[メモリ]]を自動的に解放する機構を提供する。
  
[[C言語]]などで使われている[[ライブラリ]]実装のものは、[[ソースコード]]が若干煩雑になる傾向がある。なお、[[C++]]の[[Boost]]や、[[Boost]]から取り込まれた[[C++11]](旧[[C++0x]])の[[スマートポインター]]はこの点が大幅に改善している。
+
[[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}}
 
==その他==
 
[[MonoMac]]では[[メインスレッド]]以外からSystem.GC.Collect()を呼び出しても効果がない。
 
必ずメインスレッドで実行する必要がある。
 
  
 
== 関連項目 ==
 
== 関連項目 ==

MonoBookへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細はMonoBook:著作権を参照)。 著作権保護されている作品は、許諾なしに投稿しないでください!

このページを編集するには、下記の確認用の質問に回答してください (詳細):

取り消し 編集の仕方 (新しいウィンドウで開きます)

このページで使用されているテンプレート:

このページは 1 個の隠しカテゴリに属しています: