1

私は、大きくて多くのオブジェクトを含むことができるセグメントを持つ GUI を備えたプログラムを持っています。私のプログラムの機能の 1 つは、そのセグメントを「閉じて」新しいセグメントを作成することです。

このセグメント全体は、たった 1 つの JPanel と ArrayList によってプログラムに関連付けられます。これら 2 つを破棄/null に設定すると、JPanels の子 (そのうちの 1 つは GUI コンポーネントを拡張する複雑なオブジェクトですが、多くの変数も含まれています) のいずれにもアクセスできなくなります。

私が正しければ、すべての JPanels の子供たちはガベージ コレクターによって収集されます。

しかし、子供たちの子供たちはどうなりますか?私には、5〜6世代の「家族」がいます。それらは GC の 5 回目 (または 6 回目) のパスでのみ削除されますか、それとも「ファミリー」全体がアクセス不能として検出され、一度に (または最初のパスで) 収集されますか?

編集:もう1つの小さな質問:swingコンポーネントのすべての子を削除する方法はありますか?

4

2 に答える 2

2

経験的なアプローチでは、プログラムを繰り返し実行して、消費されたメモリがベースラインに戻らない、ここに示されているパターンを探します。

画像流出

対照的に、このでは、各サイクルの後にベースラインに戻ります。

画像漏れなし

于 2012-09-12T00:13:26.463 に答える
0

あなたの質問へのコメントは、削除の問題にうまく対処しています。ただし、コンポーネントを削除せずにコンポーネントの子を削除することにまだ興味がある場合は、JComponent のドキュメントにあるように、答えはノーです (Java 7 を使用していると仮定しています。そうでない場合は、適切なコンポーネントに簡単に変更できます)。 Java のバージョン)。コンポーネント自体を削除せずに、コンポーネントから子だけをすばやく簡単に削除したい場合は、コンポーネントを再初期化することをお勧めします。

于 2012-09-11T20:49:50.087 に答える