はい、gcは一定時間で償却されます。サイズピークワーキングセットで時間で実行するアルゴリズムがあるとします。ここで、プログラムの実行中に最大でワードを割り当てることができ、コピーガベージコレクターを実行する時間コストはあることに注意してください(つまり、gcのコストは合計に比例しますライブデータの量)。そのため、gcを最大回実行すると、総実行時コストはによって制限されます。つまり、gcの償却コストは一定です。したがって、各セミスペースがサイズチェイニースタイルのコレクターがある場合は、完全なコレクションを2回以上呼び出すことはできません。nkO(n)O(k)O(n/k)O(n)2kn/kステップ。これは、ワードの割り当てに時間かかり、ワーキングセットがサイズを超えることはないため、必要な境界が得られます。これにより、GCの問題を無視できます。kO(k)k
ただし、gcの有無が無視できない1つのケースは、ロックフリーのデータ構造を書き込むときです。最新のロックフリーデータ構造の多くは、意図的にメモリをリークし、正確性をgcに依存しています。これは、高レベルでは、一部のデータをコピーし、変更を加え、CAS命令でアトミックに更新し、CASが成功するまでループでこれを実行することであるためです。これらのアルゴリズムに決定論的な割り当て解除を追加すると、アルゴリズムがはるかに複雑になるため、人々は気にしません(特にJavaのような環境をターゲットにしていることが多いため)。
編集:償却されていない境界が必要な場合、チェイニーコレクターはそれを行いません-呼び出されるたびにライブセット全体をスキャンします。グーグルのキーワードは「リアルタイムガベージコレクション」であり、Djikstra et al。スティールが最初のリアルタイムマークアンドスイープコレクターを提供し、ベイカーが最初のリアルタイムコンパクト化gcを提供しました。
@article {dijkstra1978fly、
title = {{オンザフライガベージコレクション:協力の演習}}、
author = {Dijkstra、EWおよびLamport、L。およびMartin、AJおよびScholten、CSおよびSteffens、EFM}、
journal = {ACMのコミュニケーション}、
ボリューム= {21}、
番号= {11}、
pages = {966--975}、
issn = {0001-0782}、
年= {1978}、
パブリッシャー= {ACM}
}
@article {steele1975multiprocessing、
title = {{ガーベジコレクションを圧縮するマルチプロセッシング}}、
author = {Steele Jr、GL}、
journal = {ACMのコミュニケーション}、
ボリューム= {18}、
番号= {9}、
pages = {495--508}、
issn = {0001-0782}、
年= {1975}、
パブリッシャー= {ACM}
}
@article {baker1978list、
title = {{シリアルコンピューターでのリアルタイムのリスト処理}}、
author = {ベイカーJr、HG}、
journal = {ACMのコミュニケーション}、
ボリューム= {21}、
番号= {4}、
pages = {280--294}、
issn = {0001-0782}、
年= {1978}、
パブリッシャー= {ACM}
}