在java jni调用中设置Long

时间:2013-11-01 02:56:02

标签: java java-native-interface

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

如果这是一个愚蠢的问题,我对jni的曝光是有限的,所以道歉。

我相信我可以在c层调用gettimeofday并将值返回为jlong​​:

private native long getMicros();

或者也许可以选择一个指向地址的指针,然后将值写入该地址:

private native void getMicros(Long ptr);

后者在我的脑海里抛出了很多问题,比如“我怎么知道jlong​​的二进制格式是什么”和“我怎么能这样做!”。

我只是想知道后者是否比在jni层返回一个值更快。

欢迎任何想法。

1 个答案:

答案 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;