0

私は焦点を当てています

  • フットプリント分析を通じてJavaアプリケーションのアーキテクチャを理解する
  • メモリフットプリントを調整し、JavaコレクションとJavaキャッシュの使用を最適化することにより、アプリケーションのパフォーマンスを向上させます

この目的のために、負荷テストを実行し、 WebSphereアプリケーションサーバーv7を使用するJavaEEアプリケーションでJavaヒープ分析ツールmemoryanalyzerを使用してJavaヒープダンプスナップショットを分析しました。

「ソフト参照統計」と「弱参照統計」が私の目標に役立つかどうかを尋ねています。つまり、アプリケーションのJavaコードまたはで問題があるかどうかを理解する(または単に改善する)かどうかを理解することです。アプリケーションサーバーの構成。

これらのデータを活用する方法を理解するためのアドバイスをいただければ幸いです

ソフト参照統計

合計11.416個のjava.lang.ref.SoftReferenceオブジェクトが見つかりました。これは、393個のオブジェクトをソフト参照します。合計122,9KBの2.414オブジェクトは、ソフト参照を介してのみ保持されます(存続します)。合計0Bのオブジェクトはソフト参照されておらず、ソフト参照を介して強力に保持されます(存続します)。

弱参照統計

合計28.849個のjava.lang.ref.WeakReferenceオブジェクトが見つかりました。これは、11.663個のオブジェクトを弱参照しています。合計7.4MBの132.437オブジェクトは、弱参照を介してのみ保持されます(存続します)。合計0Bのオブジェクトは弱参照されておらず、弱参照を介して強く保持されます(存続します)。

4

1 に答える 1

1

最初のルール:ソフト参照は絶対に使用しないでください。彼らは役に立たず、GCをより高価にするので、彼らの決定を後悔していると付け加えたSunの人たち。

弱参照は問題ありません。

問題は、すべてのデータをメモリに保存する必要がある場合、フットプリントを削減しようとすると、データを別の場所に保存する必要があるため、CPU、ネットワーク、またはディスクのオーバーヘッドが増えることになります。

アプリのヒープの大きさはどれくらいですか?パフォーマンスを向上させるために必要ですか?また、GCが開始されたときに受け入れることができる最大遅延はどれくらいですか?GCを調整してみましたか?


編集

ソフト参照を絶対に使用しないのはなぜですか。ソフト参照は悪いので

  • 収集するには2GCサイクルが必要です。最初のGCサイクルはそれらをマークし、2番目は実際にメモリを収集します。(これは、MarkSweepコレクターとはまったく関係ありません)
  • それらは、完全なGCの後に収集用にマークされます。

SoftReferenceに保持されているデータが実際に必要な場合は、SFのロード、完全なGC、SFの再ロードのサイクルが開始され、完全なGCが開始されます。OOMEが原因でアプリがクラッシュする可能性はありませんが、使用できなくなる可能性があります。

弱い参照は、アプリがメモリを使い果たしたときではなく、「弱く」到達可能であるときにのみクリアされるため、より優れています。弱参照を使用するフレームワークについて私が知っている最良の(そして唯一の)例は、Robotium(Androidテストフレームワーク)です。

于 2012-10-10T18:12:32.690 に答える