2011-10-26 11 views
2

私は、レジスタがPropertyChangeEventsを起動するTableModelを実装しました。私のTableModelは、下位のJTableをリフレッシュするために、TableModelEventsを発生させるイベントを待ち受けます。Java:オブザーバパターンとガベージコレクタ

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

これらのレジスタには別のライブ参照がありません。

答えて

3

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

一方、レジスタを有効にしておきながら、テーブルモデルをリスナーとしてレジスタから削除せずに変更すると、レジスタは古いモデルへの参照を保持し、モデルはガベージ集めました。

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

+0

thx、それは私が書いたものですが、私は確信しています – Telcontar

関連する問題