経過時間の非常に正確な測定値を探しているだけの場合は、を使用してくださいSystem.nanoTime()
。System.currentTimeMillis()
エポックからのミリ秒単位で可能な最も正確な経過時間をSystem.nanoTime()
提供しますが、任意のポイントに相対的なナノ秒精度の時間を提供します。
Javaドキュメントから:
public static long nanoTime()
使用可能な最も正確なシステムタイマーの現在の値をナノ秒単位で返します。
この方法は経過時間を測定するためにのみ使用でき、システムまたは壁時計時間の他の概念とは関係ありません。返される値は、固定された任意の起点時間からのナノ秒を表します(おそらく将来、値が負になる可能性があります)。この方法はナノ秒の精度を提供しますが、必ずしもナノ秒の精度を提供するわけではありません。値が変更される頻度については保証されません。約292年(2 63
ナノ秒)を超える連続した呼び出しの違いは、数値のオーバーフローのために経過時間を正確に計算しません。
たとえば、一部のコードの実行にかかる時間を測定するには:
long startTime = System.nanoTime();
// ... the code being measured ...
long estimatedTime = System.nanoTime() - startTime;
詳細については、JavaDoc System.nanoTime()およびJavaDoc System.currentTimeMillis()も参照してください。
nanoTime
通常はcurrentTimeMillisよりもはるかに正確ですが、これも比較的コストのかかる呼び出しです。currentTimeMillis()
少数(5〜6)のCPUクロックで実行されます。nanoTimeは基盤となるアーキテクチャに依存し、100以上のCPUクロックになる場合があります。