プロセッサがいつ全体ごみ集めを開始するかについて, 我々は似た策を採用す る. プロセッサは, 現在のエントリテーブルがあふれ, 最後の全体ごみ集め後 少なくとも E/G のオブジェクトが輸出された(エントリテーブルに 加えられた)ときに全体ごみ集めを起動する. ここで E はエントリテーブルのサイズのグローバルマキシマムであり, G は カスタマイズ可能な定数である. 実験では, G = 2 を採用している. 局所ごみ 集め器と同様に, 我々は決して E を減らすことはない. ゆえに E はそれまでに 任意のプロセッサで観測された最大のエントリテーブルサイズだと 解釈することができる. 全体ごみ 集めは同期局所ごみあつめと同様な裁定機構をもっている. つまり, プロセッ サが全体ごみ集めが必要だと判断したときには, そのプロセッサはマスタプロ セッサに対し, 全体ごみ集めの開始を要求する. 一つの全体ごみ集めは次のフェー ズからなる.
最初のフェーズ(sync.フェーズ)は, この後のフェーズでは, ユーザレベルの 活動はストップし, ユーザレベルのメッセージはネットワーク内を移動してい ないことを保証する. これは次のようになされる.
各プロセッサは各プロセッサへ(から)送信(受信)したユーザレベルメッセー ジの数を保持している(つまり, プロセッサ数が p のとき, 各プロセッサは 2p 個のカウンタを持つ). Sync. フェーズでは, 各プロセッサは全ての他のプ ロセッサに対して, 自分のプロセッサから送られて受信したメッセージの数を 教えるように要求し, 来たメッセージをユーザレベルに送るのを止める. これらの, 受信されて未配送でもないユーザレベルメッセージは現在の全体ごみ集めが終了した後, ユーザ レベルに送られる. この後のフェーズでは, 全体ごみ集め器は排他的にごみ集め関連メッセージを受信する .
第二のフェーズ(undelivered フェーズ)は前フェーズでバッファリングされ, まだ配送されていないメッセージから参照されているオブジェクトを見つける. これは原理的にはバッファリングされたメッセージを調べることで達成されるが, これはmutator, global collector, メッセージ レイヤがすべて共通のメッセージフォーマットを共有するという非常に柔軟 性のないランタイムシステムへと我々を導く. これらの要素の独立 を実現するために, 我々は全体ごみ集め器がメッセージフォーマットの知識な しで, 未配送のメッセージの中の参照を見つけることができるプロトコルを工 夫した. 各スタブと輸出可能なオブジェクトは輸出カウントと呼ばれるカウン タを持つ. ユーザプログラムがオブジェクトへの参照を他のプロセッサに送る ときは, オブジェクトそれ自身か(そのオブジェクトがローカルな場合), 局所 スタブの輸出カウントを増やす. 逆に, ユーザプログラムが オブジェクトへのリファレンスを受けとったときには, カウンタを減らす. ど の瞬間にも, あるオブジェクトおよびそのスタブの輸出カウントの和は 受信者に届いていないメッセージの数を与える. 全体の和がゼロかどうかを調 べることによって, 我々はそのオブジェクトを参照しているすべてのメッセー ジがユーザに届いたかどうかを検出できる. 全体の和を求めるために, 各プロ セッサは自分のエグジットテーブルをスキャンし, 輸出カウントがゼロでないスタブを 見つけ, 輸出カウントを所有者プロセッサに送る. 我々は, もしそのメッセージ があまり にも大きくなければ, 一つのプロセッサ上の複数のオブジェクトのためのカウンタを 一つのメッセージにマージする. このフェーズはときに高コストであることがわかっ ていおり, 全体ごみ集めのビジー時間の60%を占める. これは部分的には いかなるプロセッサからacknowledgeを得る時にも, プロセッサはどんなプロセッ サにも輸出カウントを送るのをやめてしまうという現在の非効率的なフロー制 御機構によるものである.
第三のフェーズ(mark フェーズ)はすべてのプロセッサにおいて, ルートからマー クを始める. これは単純に各プロセッサで局所マーキングを起動することによっ てなされる. しかし, 全体ごみ集めは局所ポインタを Boehm & Weiser の保 守的ごみ集め器によって探索するため, 微妙な問題が生ずる. 局所ごみ集め器 は全体ごみ集め器によって維持されるデータ構造についての知識 (例えばエントリ/エグジットテーブル)を全く持たな いため, ただ単に局所マークを起動するだけでは, エントリ/エグジットテーブルの全てのオブジェクトを保存してしまう. これを避けるた めに我々には技術が必要である. 局所ルートからマークする前に, 全てのプ ロセッサはエントリテーブルの全ての要素を, undelivered フェーズで検出され たものを除いて, ゼロにする. 各プロセッサはビット反転されたエグジット テーブルからスタブへの全てのポインタも上書きする. こうして, 我々は効率的 に局所ごみ集め器からエントリ/エグジットテーブルを隠蔽することができる. この前処理 の後, 各プロセッサは局所マークスタックが空になるまで局所マーク を行なう. 各プロセッサはその後自分のエグジットテーブルをスキャンし, マークされたスタブを見つけ, その所有者にマークメッセージを送る. マークメッセージを送っ た後, 各プロセッサは, 他のプロセッサからのマークメッセージもしくはマー クメッセージからの推移閉包がマークされたことを伝えるacknowledgeメッセー ジを受けとる, メッセージ主導ループに入る. こうして, 各プロセッサは局所 探索フェーズと遠隔マークフェーズを粗粒度で交替に行なう. 複数のマー クメッセージを一つのメッセージ内に効率的にまとめることで, 遠隔オブジェ クトをマークするオーバヘッドを軽減されている. さらにオーバヘッドを減らすため にもう一つの組合せポリシーが実装されている. マークメッセージを受けと るとすぐに受信者はメッセージをバッファリングし, さらなるメッセージを受 けとろうとする. 十分なマークメッセージがバッファリングされるか, ネット ワーク内にメッセージがなくなるかするまでそれはメッセージをバッファリン グする. このポリシーは, 複数の, 局所探索とそれにひき続く遠隔マークの組を 一つの組にまとめ, これによってマークメッセージの処理とエグジットテーブルの スキャンのオーバヘッドを削減する. フェーズ3は全てのプロセッサが最初のマー クメッセージに対するacknowledgeを受けとった時に終了する.
最後に, 最終フェーズ(finish フェーズ)は マークされていないオブジェクトを回収することでごみ集めを終える .