System.nanoTime()diff为0

时间:2013-07-23 10:38:39

标签: java java-native-interface profiling benchmarking nanotime

我有以下代码来尝试确定方法调用执行的时间:

long start = System.nanoTime();

diag(); // diag() is a native method, called via JNI.

long finish = System.nanoTime();

System.out.println("update() took: " + Long.toString(finish - start));

当在特定的Android设备(Xperia P)上执行时,这个差异(完成 - 开始)大部分时间都是0。

这是什么原因?并且有没有更好的方法来尝试测量此方法执行和返回的时间?

*请注意,其他Android设备的行为方式不同

1 个答案:

答案 0 :(得分:1)

  

这是什么原因?

System.nanoTime()的分辨率取决于设备和操作系统。因此,如果您设备的内部时钟分辨率过高,System.nanoTime()将无法改善效果。

  

有没有更好的方法来尝试测量此方法执行和返回的时间?

您可以多次运行该方法以增加花费的时间。但请注意,基准测试是一项复杂的艺术。您可以从这篇文章开始:How do I write a correct micro-benchmark in Java?虽然它侧重于热点JVM,但大多数原则都适用于Dalvik。