ガベージ コレクションの一時停止を高速化するためのアプローチは、どちらも (世代とインクリメンタル) 異なると思います。しかし、ジェネレーションとインクリメンタルの違いは何ですか? それらはどのように機能しますか?また、リアルタイム ソフトウェアに適しているのはどれですか?
また、Boehm GC はそれらのいずれかですか?
ガベージ コレクションの一時停止を高速化するためのアプローチは、どちらも (世代とインクリメンタル) 異なると思います。しかし、ジェネレーションとインクリメンタルの違いは何ですか? それらはどのように機能しますか?また、リアルタイム ソフトウェアに適しているのはどれですか?
また、Boehm GC はそれらのいずれかですか?
世代別 GC は、サイクル中にすべての到達不能オブジェクトを収集するわけではないため、常にインクリメンタルです。逆に、インクリメンタル GC では、生成スキームを使用して、どの到達不能オブジェクトを収集するかどうかを決定する必要はありません。
世代別 GC は、到達不能なオブジェクトを、大まかに最後に使用された時間 (いわば年齢) に従って、さまざまなセットに分割します。基本的な理論は、最近作成されたオブジェクトはすぐに到達不能になるというものです。したがって、「若い」オブジェクトを含むセットは早い段階で収集されます。
インクリメンタル GCは上記の世代スキームで実装できますが、どのグループのオブジェクトをスイープするかを決定するために別の方法を使用できます。
両方の GC メソッドの詳細については、このウィキペディアのページを参照してください。
Boehm の Web サイトによると、彼の GC はインクリメンタルで世代的です。
コレクターは、マーク スイープ アルゴリズムを使用します。これは、適切な種類の仮想メモリ サポートを提供するオペレーティング システムで、増分および世代別コレクションを提供します。
リアルタイム環境に関する限り、ガベージ コレクションを行うための新しく独創的な方法を説明している学術研究論文がいくつかあります。
インクリメンタルガベージ コレクタは、コレクション全体を中断することなく実行するのではなく、インクリメンタルに実行できるガベージ コレクタです (つまり、少し作業を行ってから、さらに作業を行ってからさらに作業を行うことができます)。これは、他のコードがオブジェクトで動作することなく、例えばマーク&スイープを行った古いストップザワールド ガベージ コレクターとは対照的です。ただし、明確にする必要があります。インクリメンタル ガベージ コレクターが実際に同じオブジェクトで実行されている他のコードと並行して実行されるかどうかは、中断可能である限り重要ではありません (たとえば、ダーティ オブジェクトとクリーン オブジェクトを区別する必要があります)。
世代別ガベージ コレクタは、古いオブジェクト、中程度のオブジェクト、新しいオブジェクトを区別します。次に、GC を新しいオブジェクト (キーワード「Eden」) にコピーし、古いオブジェクトをマーク & スイープし、中間オブジェクトでさまざまな可能性 (実装によって異なります) を実行できます。実装に応じて、オブジェクトの世代を区別する方法は、メモリ内で占有されている領域またはフラグのいずれかです。世代別 GC の課題は、ある世代から別の世代を参照するオブジェクトのリストを最新の状態に保つことです。
ここで引用されているように、Boem は増分世代 GC です: http://en.wikipedia.org/wiki/Boehm_garbage_collector
http://www.memorymanagement.org/glossary/i.html#incremental.garbage.collection
一部のトレーシング ガベージ コレクション アルゴリズムは、コレクション サイクルの途中でミューテーターが続行している間に一時停止することができ、データの一貫性が失われることはありません。このようなコレクターは段階的に動作することができ、対話型システムでの使用に適しています。
プリミティブ ガベージ コレクター (1) は、コレクション サイクルを開始すると、タスクを終了するか、それまでのすべての作業を放棄する必要があります。多くの場合、これは適切な制限ですが、システムが応答時間を保証する必要がある場合は受け入れられません。たとえば、ユーザー インターフェイスを備えたシステムやリアルタイム ハードウェア制御システムなどです。このようなシステムでは、インクリメンタル ガベージ コレクションを使用して、タイム クリティカルな処理とガベージ コレクションを無駄な労力を使わずに効果的に並行して進めることができます。
http://www.memorymanagement.org/glossary/g.html#generational.garbage.collection
世代別ガベージ コレクションは、世代仮説を利用したトレース ガベージ コレクションです。オブジェクトは世代を超えて収集されます。新しいオブジェクトは最年少世代またはナーサリ世代に割り当てられ、生き残った場合は古い世代に昇格されます。古い世代のオブジェクトは非難される頻度が低くなり、CPU 時間が節約されます。
通常、オブジェクトが若いオブジェクトを参照することはまれです。したがって、ある世代のオブジェクトは通常、若い世代のオブジェクトへの参照をほとんど持っていません。これは、若い世代を収集する過程での古い世代のスキャンが、記憶されたセットによってより効率的に実行できることを意味します。
一部の純粋関数型言語 (つまり、更新なし) では、すべての参照が時間的に後方にあるため、記憶されたセットは不要です。
Boehm-Demers-Weiser には、 を呼び出して有効にできるインクリメンタル モードがありますGC_enable_incremental
。http://www.hpl.hp.com/personal/Hans_Boehm/gc/gcinterface.htmlを参照してください。