15
System.nanoTime()は完全に役に立たないのですか?
ブログ投稿「JavaでのSystem.nanoTime()の注意」に記載されているように、x86システムでは、JavaのSystem.nanoTime()はCPU固有のカウンターを使用して時間値を返します。次に、通話時間を測定するために使用する次のケースを考えます。 long time1= System.nanoTime(); foo(); long time2 = System.nanoTime(); long timeSpent = time2-time1; マルチコアシステムでは、time1を測定した後、スレッドが別のプロセッサにスケジュールされ、そのカウンタが以前のCPUのカウンタよりも小さい場合があります。したがって、time1 より小さい time2の値を取得できます。したがって、timeSpentで負の値を取得します。 この場合を考えると、今のところSystem.nanotimeはほとんど役に立たないのではないでしょうか。 システム時刻を変更してもナノタイムには影響しないことを知っています。それは私が上で説明した問題ではありません。問題は、各CPUがオンになって以来、異なるカウンターを保持することです。このカウンタは、最初のCPUと比較して2番目のCPUで低くなることがあります。スレッドは、time1を取得した後、OSによって2番目のCPUにスケジュールされる可能性があるため、timeSpentの値は正しくなく、負の値になる場合もあります。