Java クラスでステートメント A からステートメント B に移動するのにかかる時間をキャプチャしたいと考えています。これらのステートメントの間には、多くの Web サービス呼び出しが行われます。正確な時間をキャプチャするために使用できるJavaの機能のようなストップウォッチがあるかどうか知りたいですか?
キャディ
nanoTime()
これにより、2 つの呼び出し間のナノ秒数が得られます。
long start = System.nanoTime();
// Java statements
long diff = System.nanoTime() - start;
より高度なアプローチについては、Stopwatch クラスに対応するいくつかの重複する質問があります。
@Ben Sの答えは的を射ています。
ただし、時間測定ステートメントをコードに挿入するアプローチはスケーリングしないことに注意してください。
System.nanoTime()
無料ではありません!アプリケーションの実行速度が遅い理由を突き止めて、何を最適化するかを決定することが本当の目的である場合は、Java プロファイラーを使用することをお勧めします。これには、ソース コードにゼロの変更を加える必要があるという利点があります。(もちろん、プロファイリングは特定のセクションで費やされた正確な時間を提供するものではありません。むしろ、時間の割合を提供します...どこを最適化するかを決定するのにはるかに役立ちます。)
System.currentTimeMillis はミリ秒単位で取得し、nanoTime はナノ秒単位で取得します。
さまざまな手法のパフォーマンスを比較しようとしている場合、JVM 環境は複雑であるため、単純に 1 回だけでは意味がないことに注意してください。私はいつも、メソッド 1 を数千回実行し、次に System.gc を実行し、次にメソッド 2 を数千回実行し、次に別の System.gc を実行し、ループバックしてすべてをもう一度少なくとも 5 回実行するループを作成します。または6回。これは、ガベージ コレクション、ジャスト イン タイム コンパイル、および JVM で発生するその他の魔法の処理にかかる時間を平均化するのに役立ちます。