2011-10-26 61 views
2

我已經實現了一個TableModel,其寄存器啓動PropertyChangeEvents。我的TableModel監聽這些事件以觸發TableModelEvents以刷新內聯JTable。Java:觀察者模式和垃圾收集器

如果TableModel被清除或用新寄存器刷新......讓TableModel調用每個寄存器中的「removePropertyChangeListener」方法以允許GC收集這些寄存器?

說明不存在對這些寄存器的另一個實時引用。

回答

3

否。註冊對象具有對錶模型的引用(通過偵聽器)。所以如果寄存器不再可用,它將被垃圾收集。另一方面,如果讓寄存器保持活動狀態,但在不將其從寄存器中作爲偵聽器移除的情況下更改表模型,則寄存器將保持對舊模型的引用,並且模型將不會被垃圾回收集。

讓長壽命對象監聽短暫對象中的變化通常是一個好主意。如果是另一種方式,那麼忘記刪除監聽器會導致內存問題(除非使用弱引用來維護監聽器列表)

+0

thx,這就是我所使用的,但我想確定 – Telcontar