2009-06-29 1 views
4

内部的なベンチマークのためにnanoTimeを使用するいくつかのプロセスがJavaであります(同じスレッド内で正確であるはずです)。2つのJavaプロセス間のnanoTimeの違いを正確に判断する方法はありますか?

プロセス間で通信が可能です。

スレッド間のnanoTimeの違いを調べる標準的な方法はありますか? (例えば、NTPを模倣する)。これは定期的に行われるべきですか?

答えて

3

javadocは、多くの警告でnanoTime()メソッドを修飾します。その要点は、コードブロック内でそれを使用して経過時間を測定し、「ナノ秒の精度ですが、必ずしもナノ秒の精度ではありません」ということです。

これはうそつきの言葉で、おそらく意図的にそうです。おそらく、nanoTime()を使って2つの異なる経過時間の計算を比較することは避けます。悪い結果をもたらす可能性があります。

ベンチマーク用の場合は、ループ内の同じコードをベンチマークし、経過時間をミリ秒の範囲に設定し、より信頼性の高いcurrentTimeMillis()を使用できるようにすることをお勧めします。

+1

+1: 'nanoTime()'が本当にうまくいくのは、同じスレッド上での2回の呼び出しの間にかかる時間を測定することだけです。だから*差*があなたがそれから出ることができる唯一の意味のある数字です。そのメソッド自体が返す*絶対値*は有用ではありません**。 –

0

ベンチマークには使用しないことをお勧めします。 1つの理由は、パフォーマンスが多少不明であることです。マルチプロセッサマシン上のWindowsでは非常に遅くなる可能性があります。

同期と値そのものについては、Windowsでは異なるプロセッサでも同期値が保証されています。また、窓の増加率は一定です。このようなプロパティはサポートされているため、その値を取得するのはコストがかかります。

Linuxでは、プロセッサ間で同期がなく、また、CPUの周波数が変化している場合(たとえば節電のため)、増加率が異なる場合があります。

Solarisでは、次のnanoTimeが> =最後のnanoTimeであることを除いてLinuxと似ています。

関連する問題