私はJavaアプリケーションを持っていましたが、これは私が期待したほど高速ではありません。私はそれを改善する方法について多くの検索をしましたが、幸運ではありませんでした。どのようにJavaで "同期"コードで時間のコストを知るには?
コードを確認していて、コードにというキーワードが多数あることがわかりました。私は彼らがロックを待つのにあまりにも多くの時間を取った場合、考えています。
費用はどれくらいかかりますか?したがって、時間がかかり過ぎると、よりよい解決策を見つけることができます。
私はJavaアプリケーションを持っていましたが、これは私が期待したほど高速ではありません。私はそれを改善する方法について多くの検索をしましたが、幸運ではありませんでした。どのようにJavaで "同期"コードで時間のコストを知るには?
コードを確認していて、コードにというキーワードが多数あることがわかりました。私は彼らがロックを待つのにあまりにも多くの時間を取った場合、考えています。
費用はどれくらいかかりますか?したがって、時間がかかり過ぎると、よりよい解決策を見つけることができます。
私はjvisualvmのスレッドモニタ機能を提案し、スクリーンショットを探している間にこのブログポスト:Detecting Thread Contentionsを実行しました。それは単なるスクリーンショットよりも良い方法です:)。
しかし、ここで、それはとにかくです: (画像クレジット:上記のブログ記事)
優れたプロファイラは、同期にはまったく関係しない可能性がある、遅さを引き起こすメソッドを特定することができます。また、プロファイラのスレッドの状態を見ると、同期のために待機が多すぎるかどうかがわかります。いずれにしても、synchronizedキーワードが理由なしに使用されている場合を除き、パフォーマンスのためにキーワードを削除することは生産的ではありません。
'sunchronization'が必要ない場合は、パフォーマンスの低下につながります。同期が必要な場合i)適切な粒度レベルで実行する必要があります。ii)除去されている場合、逆効果ではありません。 – Cratylus
user384706私は同意します。 OPはコードが同期されている理由を理解する必要があります。 –
同期のコストは通常小さいです。問題は、通常、同期ブロックで何をするのかです。 IO(ソケットまたはネットワーク)を使わず、理想的にはシステムコールを行わないことを確認してください。単純なタスクの場合、ロック時間はサブマイクロ秒です。
「同期」が必要以上のブロックで実行されると、不要な待機のためにパフォーマンスが低下する可能性があります。 – Cratylus
プロファイリングツールを試しましたか? – xappymah