特定のエンドポイントへのリクエストに応答して、非常に多くのバックグラウンド ワーカー スレッドを生成する Web アプリケーションがあります。ワーカーの状態の透明性を高めるために、ワーカーがイベントを投稿できるイベント バスを追加しました。イベントはマップにプッシュされ、各ワーカーの状態を経時的に追跡します。定期的にマップのスナップショットが作成され、より永続的な場所にプッシュされます。スナップショットはリクエスト トークンを介してリクエストに関連付けられます。
各リクエストに独自のイベント バスを提供することは確かに魅力的です。次に、各リクエストは独自のマップを取得します。要求が完了し、最終的なスナップショットがプッシュされると、マップとイベント バスが範囲外になり、その結果、ガベージ コレクションが実行されます。
少なくとも、それが理論です。しかし、私が話した一部の人々は、イベント バスへの唯一の明示的な参照が範囲外になった場合でもイベント バスが収集されないことを示唆していました。より経験豊富な Java/Guava 実践者の視点に本当に感謝しています。