Java 如何使用eventbus而不在Vaadin中创建内存泄漏?

Java 如何使用eventbus而不在Vaadin中创建内存泄漏?,java,spring,events,memory-leaks,vaadin,Java,Spring,Events,Memory Leaks,Vaadin,我们将Spring与Vaadin一起用于UI框架。我们想让我们的UI组件监听全局事件总线以获取事件 但这也有问题,到目前为止,我们所研究的事件系统都使用强引用来注册侦听器。这意味着,即使Vaadin已经释放了该组件,它也永远不会被垃圾收集,并造成内存泄漏 我们尝试使用分离来注销组件。这样做的问题是,当您不查看组件时,选项卡之类的东西会分离组件,因此它们不会得到更新 我们一直在使用GoogleGuavaEventBus,我刚刚测试了SpringJMS支持和反应堆支持。我无法让@JmsListene

我们将Spring与Vaadin一起用于UI框架。我们想让我们的UI组件监听全局事件总线以获取事件

但这也有问题,到目前为止,我们所研究的事件系统都使用强引用来注册侦听器。这意味着,即使Vaadin已经释放了该组件,它也永远不会被垃圾收集,并造成内存泄漏

我们尝试使用
分离
来注销组件。这样做的问题是,当您不查看组件时,选项卡之类的东西会分离组件,因此它们不会得到更新

我们一直在使用GoogleGuavaEventBus,我刚刚测试了SpringJMS支持和反应堆支持。我无法让
@JmsListener
使用
“prototype”
,在我们的用例中,番石榴和Reactor都会泄漏内存

是否有一个好的事件系统使用弱引用来保留侦听器?还是有一个好地方可以把一个未注册的人牵扯进瓦丁?有没有我没有想到的模式可以帮助我们解决这个问题


注意:我意识到这些问题听起来没有重点。我正在寻找问题的解决方案,并试图避免将答案缩小到我认为正确答案的范围。

你尝试过吗?这个答案有一些关于选择mbassador的原因的较长信息:@Gokhanore在阅读文档和挑选代码之后,目前还不清楚它是解决了问题还是减少了问题,或者两者都没有。我向他们提交了一个bug,让他们记录如何管理订阅者的参考资料。@cfrick这很有趣,我已经向mbassador提出了我对我们问题的建议,因为我没有时间调查它。我们仍然需要对它进行一些探索性的编码。注意:如果有人有任何答案,我们将在将来再次研究。