我想从linux返回微秒,因为java在具有单调时钟的系统上只有挂钟时间到毫秒精度。
如果这是一个愚蠢的问题,我对jni的曝光是有限的,所以道歉。
我相信我可以在c层调用gettimeofday并将值返回为jlong:
private native long getMicros();
或者也许可以选择一个指向地址的指针,然后将值写入该地址:
private native void getMicros(Long ptr);
后者在我的脑海里抛出了很多问题,比如“我怎么知道jlong的二进制格式是什么”和“我怎么能这样做!”。
我只是想知道后者是否比在jni层返回一个值更快。
欢迎任何想法。
答案 0 :(得分: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;