我有一个 Web 应用程序,它生成大量后台工作线程以响应对某个端点的请求。为了让工作人员的状态更加透明,我添加了一个事件总线,工作人员可以向其发布事件。事件被推送到地图中,随着时间的推移跟踪每个工人的状态。定期对地图进行快照并将其推送到更永久的位置,其中快照通过请求令牌与请求相关联。
为每个请求提供自己的事件总线当然很有吸引力。然后每个请求都有自己的地图。当请求完成并推送最终快照时,映射和事件总线超出范围,因此被垃圾收集。
至少,理论上是这样的。但与我交谈过的一些人建议,即使对它的唯一显式引用超出范围,也不会收集事件总线,因为它在设置期间设法为自己创建其他引用。我真的很感激有经验的 Java/Guava 从业者的观点。