2011-10-26 25 views
2

我已经实现了一个TableModel,其寄存器启动PropertyChangeEvents。我的TableModel监听这些事件以触发TableModelEvents以刷新内联JTable。Java:观察者模式和垃圾收集器

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

说明不存在对这些寄存器的另一个实时引用。

回答

3

否。注册对象具有对表模型的引用(通过侦听器)。所以如果寄存器不再可用,它将被垃圾收集。另一方面,如果让寄存器保持活动状态,但在不将其从寄存器中作为侦听器移除的情况下更改表模型,则寄存器将保持对旧模型的引用,并且模型将不会被垃圾回收集。

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

+0

thx,这就是我所使用的,但我想确定 – Telcontar