GC
GC は Collect が作成した計画を適用し、Context を回収して対象の Area の終了処理を行います。
flowchart TD
Ranges["Range の記録を削除"] --> Promote["promote()"]
Promote --> Prologue["gc_prologue()"]
Prologue --> Tail["Context の末尾を回収"]
Tail --> Promotions["保持するメッセージを追加"]
Promotions --> Areas["回収対象の Area を削除"]
Range の記録を削除
回収対象の Area の EffectRange と ObserveRange の記録を削除します。
promote()
Area が保持したいメッセージを集めます。最初の tick() より前に retire した Area では、promote() を呼び出しません。
gc_prologue()
その Area のリソースを解放します。回収される各 Area に対して、必ず 1 回呼び出されます。この 2 つのコールバックは、Area ごとに順番に実行されます。
Context の末尾を回収
計画に回収可能な末尾が含まれる場合は、Context から切り離し、その内容を CoopContext.garbage に追加します。
保持するメッセージを追加
集めたメッセージを、残った Context に追加します。
回収対象の Area を削除
回収対象の Area をそれぞれの lane から削除し、その後、空になった lane を削除します。