マルチタブ アプローチを使用する Vaadin アプリケーションがあります。が見つからないApplication.getWindow(String name)場合は、新しいウィンドウを作成してアプリケーションに追加するという方法でオーバーライドされます。super.getWindow(name)すべてのウィンドウにはWindow.CloseListener、出力する印刷メッセージがあります。また、ウィンドウの作成と破棄の瞬間も見られます-コンストラクターとfinalize()両方がメッセージをコンソールに出力します。
同じブラウザー タブを更新すると、新しいウィンドウが作成され、コンソールに のメッセージが表示され、メソッドWindow.CloseListenerからのメッセージは表示されません。finalize()インスタンスをカウントするシングルトン AtomicLong を追加すると (コンストラクターに追加、 dec in finalize())、時間とともに減少しないインスタンスの数が (これらの更新で) 増加していることがわかります。
どうやら Vaadin は閉じたウィンドウを格納しているようです。またjmap、アプリケーションを作成し、Eclipse MAT でヒープ ファイルを開きました。MAT は、閉じたウィンドウのコンポーネントの 1 つ がUriFragmentUtilityチェーンで参照されていることを示しています: Application-> WebApplicationContext-> CommuncationManager-> (paintableMap を介して) UriFragmentUtility(添付の画像を参照)。
閉じたウィンドウを破棄してメモリ リークを防ぐにはどうすればよいですか?

更新
コード ウィンドウは Vaadin にのみ追加され、削除されないことがわかりましたApplication。追加した後、Application.removeWindow()同じタブの更新に関連する変更はありません。