2011-10-22 6 views
5

私はJavaアプリケーションを持っていましたが、これは私が期待したほど高速ではありません。私はそれを改善する方法について多くの検索をしましたが、幸運ではありませんでした。どのようにJavaで "同期"コードで時間のコストを知るには?

コードを確認していて、コードに​​というキーワードが多数あることがわかりました。私は彼らがロックを待つのにあまりにも多くの時間を取った場合、考えています。

費用はどれくらいかかりますか?したがって、時間がかかり過ぎると、よりよい解決策を見つけることができます。

+2

「同期」が必要以上のブロックで実行されると、不要な待機のためにパフォーマンスが低下する可能性があります。 – Cratylus

+1

プロファイリングツールを試しましたか? – xappymah

答えて

4

私はjvisualvmのスレッドモニタ機能を提案し、スクリーンショットを探している間にこのブログポスト:Detecting Thread Contentionsを実行しました。それは単なるスクリーンショットよりも良い方法です:)。

しかし、ここで、それはとにかくです: thread contention in jvisualvm (画像クレジット:上記のブログ記事)

1

優れたプロファイラは、同期にはまったく関係しない可能性がある、遅さを引き起こすメソッドを特定することができます。また、プロファイラのスレッドの状態を見ると、同期のために待機が多すぎるかどうかがわかります。いずれにしても、synchronizedキーワードが理由なしに使用されている場合を除き、パフォーマンスのためにキーワードを削除することは生産的ではありません。

+0

'sunchronization'が必要ない場合は、パフォーマンスの低下につながります。同期が必要な場合i)適切な粒度レベルで実行する必要があります。ii)除去されている場合、逆効果ではありません。 – Cratylus

+0

user384706私は同意します。 OPはコードが同期されている理由を理解する必要があります。 –

1

同期のコストは通常​​小さいです。問題は、通常、同期ブロックで何をするのかです。 IO(ソケットまたはネットワーク)を使わず、理想的にはシステムコールを行わないことを確認してください。単純なタスクの場合、ロック時間はサブマイクロ秒です。

関連する問題