リクエストの長さを監視するフィルターを作成しました。
long start = System.nanoTime();
...
long end = System.nanoTime();
これからミリ秒数を取得するにはどうすればよいですか?
_(end - start) / 1000000
_
1マイクロ秒= 1000ナノ秒
1ミリ秒= 1000マイクロ秒
結果は切り捨てられますが、通常、真のナノ秒精度は得られないことに注意してください(精度はOSによって異なります)。 nanoTime()
のJavadocから:
この方法はナノ秒の精度を提供しますが、必ずしもナノ秒の精度である必要はありません。
また、TimeUnitクラスを使用して変換を支援できることにも注意してください。古いバージョンのJavaでは、次のコードは、処理時間を他の時間形式に変換する例である可能性があります。
long startTime = System.nanoTime();
//Processing in-between.
long endTime = System.nanoTime();
long duration = endTime - startTime;
duration = TimeUnit.SECONDS.convert(duration, TimeUnit.NANOSECONDS);
Javaの新しいバージョンでは、TimeUnitクラスにショートカットがあることに注意してください。
上記のサンプルは、ナノ秒の長さを秒に変換します。また、これにより切り捨てられるため、精度がいくらか失われることに注意してください。したがって、分に切り替えると、秒の精度が失われます。 「12分32秒」の結果を取得したい場合は、このソリューションでさらに処理を行う必要があります。
TimeUnit.NANOSECONDS.toMillis(end - start);
それで全部です!
それらを引き、結果を10 ^ 6で割るだけです。
1ナノ秒は10 ^ -9秒であり、それに対応して10 ^ -6ミリ秒です。
http://en.wikipedia.org/wiki/Nano-
意味のある結果を得るには:
void procedure ( ... )
{
...
}
double measureProcedure ( double epsilon , ... )
{
double mean ;
double stderr = 2 * epsilon ;
while ( stderr > epsilon )
{
long start = System.nanoTime();
procedure ( ... ) ;
long end = System.nanoTime();
// recalculate mean , stderr
}
return ( mean / 1000000 ) ;
}
System.currentTimeMillis()
を使用できます。
警告:
戻り値の時間の単位はミリ秒ですが、値の粒度は基盤となるオペレーティングシステムによって異なり、それよりも大きくなる場合があることに注意してください。たとえば、多くのオペレーティングシステムは、数十ミリ秒の単位で時間を測定します。