0

Javaは、単調クロックを備えたシステムではミリ秒の精度までの壁時計時間しか持たないため、Linuxからマイクロ秒を返したいと考えています。

私の jni への露出は限られているため、ばかげた質問であれば申し訳ありません。

c レイヤーで gettimeofday を呼び出し、値を jlong​​ として返すことができると思います。

private native long getMicros();

または、別の方法として、アドレスへのポインターを取得し、このアドレスに値を書き込みます。

private native void getMicros(Long ptr);

後者については、「c は jlong​​ のバイナリ形式をどのように知ることができるのか」や「どうすればこれを行うことができるのか!」など、多くの疑問が頭に浮かびます。

後者は、jni レイヤーを介して値を返すよりも速いのではないかと思いました。

どんな考えでも大歓迎です。

4

1 に答える 1

0

http://docs.oracle.com/javase/6/docs/api/java/lang/System.html#nanoTime()

「利用可能な最も正確なシステム タイマーの現在の値をナノ秒単位で返します。このメソッドは、経過時間の測定にのみ使用でき、システム時間または壁時計時間の他の概念とは関係ありません。返される値はナノ秒を表します。ただし、任意の時間 (おそらく将来のため、値は負の可能性があります)。このメソッドはナノ秒の精度を提供しますが、必ずしもナノ秒の精度ではありません。値がどのくらいの頻度で変化するかについては保証されません。約 292 年を超える連続した呼び出しの違い ( 2 63ナノ秒) では、数値のオーバーフローにより経過時間が正確に計算されません。

たとえば、一部のコードの実行にかかる時間を測定するには:"

   long startTime = System.nanoTime();
   // ... the code being measured ...
   long estimatedTime = System.nanoTime() - startTime;
于 2013-11-01T03:03:52.813 に答える