6

次のように新しいプレゼンターを作成しています。

new MyPresenter(new MyView());

いくつかのイベント ハンドラーを登録し、ビューなどにバインドします。最終的には、そのビューを「閉じて」ブラウザでレンダリングされないようにするかもしれません。私はこのインスタンスへの参照をMyPresenterどこにも維持していません。

このトピックに関する Google フォーラムでは、従来の対応は「参照を​​ null に設定する」ことであり、それについては心配する必要はありません。this = null;Javascript とは異なり、明らかな理由から Javaだけで言うことはできません。しかし、Javascript では、もう使用されないとわかっているオブジェクト参照を簡単に無効にすることができます。

私の質問: このプレゼンターへの参照を保持していないため、このプレゼンターがガベージ コレクションされているかどうかを確認するにはどうすればよいですか? それは非常に明確に存在します。GWT と JS がこれを処理してくれると信じるべきですか? それとも、使い終わったときにMyPresenter手動で参照できるように、独自の参照を維持する必要がありますか?null

4

1 に答える 1

2

メモリ リークには、次の 2 種類があります。

  • DOM/ブラウザ レベルのメモリ リーク
  • アプリケーションのメモリ リーク。

通常、DOM/ブラウザー レベルのメモリ リークは、アプリを閉じた後も続きます。私の知る限り、影響を受けるのは古いブラウザー (IE6) のみです。これが、GWT が特別な方法でハンドラーをアタッチする理由です。
これは最新のブラウザーでは問題にならないはずですが、少なくともアプリを閉じれば問題にはなりません。ただし、アプリケーションのメモリ リークになる可能性があります。(詳細については、こちらを参照してください)。しかし、一般に、最新の Javascript GC は、未使用のメモリを解放するのに非常に優れています。

アプリケーションのメモリ リークは、実行時間の長いアプリケーションや、多数のビュー/プレゼンターを動的に作成し、イベント ハンドラーを介して参照を保持する場合に問題になる可能性があります。しかし、ここでは関係者の範囲に大きく依存します。
この投稿は、それに関するいくつかの詳細情報を含む良いリファレンスです。

最後に、アプリケーションのメモリ リークが実際に発生していないことを確認するには、Dev Tools Heap Profilerを使用して、長期間にわたるメモリ消費を確認する必要があります。
このブログ投稿には、それに関する詳細情報があります。

于 2012-04-23T21:44:13.700 に答える