2

我已经实现了一个 TableModel,它的寄存器启动 PropertyChangeEvents。我的 TableModel 监听这些事件以触发 TableModelEvents 以刷新底层 JTable。

如果 TableModel 被清除或使用新寄存器刷新...... TableModel 是否可以在每个寄存器中调用“removePropertyChangeListener”方法以允许 GC 收集这些寄存器?

假设没有其他对这些寄存器的实时引用。

4

1 回答 1

3

不,注册对象引用了您的表模型(通过侦听器)。因此,如果寄存器不再可访问,它将被垃圾收集。

另一方面,如果您保持寄存器处于活动状态,但更改表模型而不将其作为侦听器从寄存器中删除,那么寄存器将保持对旧模型的引用,并且模型不会被垃圾收集。

让长寿命对象监听短寿命对象的变化通常是个好主意。如果是另一种方式,那么忘记删除侦听器会导致内存问题(除非使用弱引用来维护侦听器列表)

于 2011-10-26T09:57:02.727 回答