2012-08-10 9 views
5

4400ナノ秒かかる私はナノ秒タイマーに囲まWICHありません私のシステムで4400ナノ秒。すなわち、このコードに対し、4.4マイクロ秒であろう:なぜSystem.nanoTimeの()は、私はいくつかのアルゴリズムをテストしていた

a = System.currentTimeMillis(); 
    for (int i = 0; i < 1000; i++) 
     System.nanoTime(); 
    System.out.println(System.currentTimeMillis() - a); 

プリント0

+5

top asnwerは説明する必要がありますhttp://stackoverflow.com/questions/1770010/how-do-i-measure-time-elapsed-in-java –

+0

可能性のある精度についてはありませんか?別のプロセッサを試してください:) – tomasb

答えて

4

4400ナノ秒4.4マイクロ秒、又は0.0044ミリ秒です。 2番目の例では、経過時間が, 1ミリ秒未満であるため、常にゼロが出力されます。次に使用される2つのタイマーの違いがあります:currentTimeMillisはクロックスキューに対して調整できますが、nanoTimeではできませんが、ここではそれが問題になるとは思っていません。

+0

ああ私の神は私がとてもばかげている...ミリ秒の間違ったマイクロ...とにかく私は、コードを更新し、まだ少し奇妙です。 –

+1

実際のシステムタイマの分解能はナノ秒である必要はありません。あなたの場合、それは4.4マイクロ秒(すなわち、可能な限り小さな増分) –

0

nanoseconds()を使用することは、おそらく実装者が検討したユースケースではありませんでした。通常は、「遅い」操作、または「遅い」という「速い」操作への多くの呼び出しに時間をかけるために使用します。ここでは、「遅い」は0.1ミリ秒を超えるものです。

より長い時間をかけたい理由は、nanoseconds()の細かさはあまり良くありません。ハードウェアとOSによって異なりますが、ナノ秒近くはありません。

関連する問題