2011-08-08 11 views
1

私のプログラム(GlassFishで動作するJSF)に問題があります。それは、多くのデータを処理しています(そして、それをhibernateを使ってデータベースに挿入しています)。そして、問題は、約2時間の作業の後、それが遅くなることです。私は例外はありません(特にOutOfMemoryはありません)。メモリリークの可能性はありますか?私はEclipse Memory Analyzerでヒープ・ダンプをチェックしましたが、いくつかのHashMapの問題がありました。私はそれが可能であったところでそれを修復しました、そして今、ツールはこの問題を表示しません。しかし、私のアプリケーションはまだ適切に動作しません。OutOfMemory例外のないメモリリーク?

+0

visualvmを使用してVMに接続しようとすると、VMの状態を見てみると、いくつかの洞察を得ることができます。 –

+0

related/dupe:http://stackoverflow.com/questions/40119/how -to-find-a-java-memory-leak – amit

答えて

3

あなたの問題は、従来のメモリリークではないようです。

私が推測しなければならなかったのは、設計が不適切なデータ構造、非効率なキャッシュ、または並行性のボトルネックがあると言えます。

パフォーマンスのプロファイリングに焦点をあてて、時間がどこにあるかを確認し、ロック競合の兆候を探す必要があります。

0

ある種のメモリリークがある可能性があります。は、一時的なオブジェクトを多く生成するため、ガベージコレクタがパフォーマンスを殺してしまうことがあります。これが当てはまる場合は、-Xmxオプションを使用してプレイすることができます。ヒープサイズが小さければアプリケーションの速度が遅くなり、ヒープが大きければoppisite効果が表示されます。

この影響は、内部データ構造の拡大によっても引き起こされる可能性があります。データ構造に対する操作は常に時間の複雑さ(「Big-O-Notation」)を持ち、複雑さが多項式またはそれ以上であれば、そのような操作も性能を低下させる可能性があります。時間が経つにつれて成長し、最適なコレクションタイプを選択したことを二重チェックするアプリケーション内のコレクションを見てください。

関連する問題