EventBus 和 Swing JFrame 垃圾收集?

EventBus and Swing JFrame Garbage Collection?

我正在重构一个 Swing 应用程序以大量使用 Guava 的 EventBus。 Swing 应用程序基本上运行一个决策过程,在 JFrame 中显示大量结果,然后在 JFrame 关闭后进行处理。现在它还订阅了一个 EventBus 来处理用户对数据的操作。

我的问题是这样的。我担心 EventBus 关闭后可能会保留对 JFrame 及其所有内部引用(包括所有模型数据)的引用。添加一个 WindowListener 以从 EventBus 取消订阅它是否足够,以便垃圾收集可以释放数据和底层模型?或者这是我不需要担心的事情?

您需要 unregister 您之前注册的所有组件,因为有 no WeakEventBus

注意注销对象

@throws IllegalArgumentException if the object was not previously registered.

除非对象没有 @Subscribe 方法。 Javadoc 并不准确,因为注册和取消注册此类对象根本不执行任何操作(并且永远不会抛出)。