0

これが私のささやかな提案です:

  1. JVMの起動時
    1. System.currentTimeMillis()「壁時計」の開始時刻として呼び出して保存します:
      long currentTimeMillis0
    2. 呼び出しSystem.nanoTime()て、「ナノ」時間の開始として保存します
      long nanoTime0
  2. プログラムの実行中、 を使用して多くのタイムスタンプを保存しSystem.nanoTime()ます。

nanoTime の正確な値はそれ自体では役に立たないことは十分承知していますが、duration: のコンテキストで使用すると便利ですendNanoTime - beginNanoTime

記録された任意のナノタイムで、「currentTimeNanos」を次のように計算することは合理的
(1000L * currentTimeMillis0) + (anyNanoTime - nanoTime0)ですか?

4

2 に答える 2

1

ミリ秒とナノタイムを使用する場合は、時間のわずかな差を計算するためにナノタイムを使用し、コンテキストを提供するために最初にミリ秒タイマーを使用します。

注:タイミングの連続ストリームがある場合は、マシン間でナノタイムを使用できます。つまり、それらの間の最適なタイミングを推定し、外れ値を検出できます (絶対的な違いがわからない場合でも)。このクラスを使用してRunningMinimumを推定します。

于 2016-01-10T16:16:16.220 に答える
1

ミリ単位とナノ単位の両方で、開始/終了時間を組み合わせる必要があると思います。例えば:

long startTimeMillis = System.currentTimeMillis() * 1000;
long startTimeNano = System.nanoTime();
... // do some work
long currentTimeNano = (System.currentTimeMillis()*1000 - startTimeMillis) + (System.nanoTime() - startTimeNano);

詳細については、nanoTime メソッドの公式 javadoc: https://docs.oracle.com/javase/1.5.0/docs/api/java/lang/System.html#nanoTime()

于 2016-01-10T15:56:30.800 に答える