我实现了一个TableModel,其寄存器启动了PropertyChangeEvents。我的TableModel监听这些事件以触发TableModelEvents以刷新底层的JTable。
如果使用新寄存器清除或刷新TableModel,那么TableModel是否在每个寄存器中调用“removePropertyChangeListener”方法以允许GC收集这些寄存器?
认为没有对这些寄存器的另一个实时引用。
答案 0 :(得分:3)
没有。 register对象具有对表模型的引用(通过侦听器)。因此,如果寄存器不再可用,它将被垃圾收集。
另一方面,如果保持寄存器处于活动状态,但是更改表模型而不将其作为监听器从寄存器中删除,那么寄存器将保持对旧模型的引用,并且模型不会被垃圾收集
让长寿命对象监听短期对象的变化通常是个好主意。如果是另一种方式,那么忘记删除侦听器会导致内存问题(除非使用弱引用来维护侦听器列表)