2016-08-12 4 views
3

私は移動することに反応するアプリケーションを持っています。Hashtableの内容を削除するか、新しいHashtableをインスタンス化するだけですか?

リスナーは、1つの動きで複数回呼び出されたようです。つまり、アプリケーションをモニターのある部分から別の部分にドラッグした場合です。

この場合、Hashtableにデータを保存します。データを格納するたびに、空のハッシュテーブルに格納する必要があります。

Hashtableの内容を毎回削除する方が良いか、同じ変数を使用して新しいHashtableをインスタンス化できたらいいですか?ハッシュテーブルには、5つ以上のキーと値のペアが含まれません。

後者のメソッドが多すぎるメモリの消費を開始するか、Javaのガベージコレクタがこのメモリを十分に解放しますか?

+1

これを過度に思っているかもしれません。必要になるまで最適化しないでください。なぜそれを選んで何が起こるか見るのはなぜですか? –

+0

GCは間もなくそれをクリーンアップする可能性がありますが、早すぎる最適化についてあまり心配する必要はありません。より緊急の質問imhoは 'HashMap'または' ConcurrentHashMap'の上に 'Hashtable'を使用している理由でしょう – oldrinb

+0

関連:http://stackoverflow.com/questions/10197988/performance-issue-clear-and-reuse-a-新しいものを収集するか、それを手に入れるか、または新しいものを入手するhttp://stackoverflow.com/questions/18370780/empty-an-arraylist-or-just-create-a-new-one-and-let古いガーベッジ・コレクトnoredirect = 1&lq = 1 – Thilo

答えて

1

変更可能な地図対不変の選択のほかに、あなたはすべての変更は、HashMapの中ですぐに表示するかどうか

  • の間で選択をする必要がある
  • か、キューとフラッシュへの変更イベントを書き込むことができます。それらをHashMapに定期的に渡すと、これはHashMapが第1の解決策と同じくらい頻繁に書き込まれないことを保証し、パフォーマンスメリット+応答性を提供します(キューに入れることはHashMapを置くよりも軽い操作です)。

私は、先に進んで両方のアプローチを試してみることをお勧めします。

コードの明快さとわかりやすさを最優先する必要があります。明確なメソッド(ここでは不変のHashMapを使用)のパフォーマンスへの影響が耐えられない場合は、そのために行ってください。

関連する問題