0

我想从 linux 返回微秒,因为 java 在具有单调时钟的系统上只有挂钟时间到毫秒精度。

我对 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 回答