2

レジスタが PropertyChangeEvents を起動する TableModel を実装しました。私の TableModel は、これらのイベントをリッスンして、基になる JTable を更新するために TableModelEvents を起動します。

TableModel が新しいレジスタでクリアまたはリフレッシュされた場合...GC がそれらのレジスタを収集できるようにするために、TableModel は各レジスタで「removePropertyChangeListener」メソッドを呼び出す必要がありますか?

これらのレジスタへの別のライブ参照がないと仮定します。

4

1 に答える 1

3

いいえ。登録オブジェクトには、(リスナーを介して) テーブル モデルへの参照があります。そのため、レジスタに到達できなくなった場合は、ガベージ コレクションが実行されます。

一方、レジスターを有効に保ち、レジスターからリスナーとして削除せずにテーブルモデルを変更すると、レジスターは古いモデルへの参照を維持し、モデルはガベージコレクションされません。

通常、有効期間の長いオブジェクトに、有効期間の短いオブジェクトの変更をリッスンさせることをお勧めします。逆の場合、リスナーを削除するのを忘れると、メモリの問題が発生します (リスナーのリストを維持するために弱い参照が使用されない限り)

于 2011-10-26T09:57:02.727 に答える