我有以下代码来尝试确定方法调用执行的时间:
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设备的行为方式不同
答案 0 :(得分:1)
这是什么原因?
System.nanoTime()
的分辨率取决于设备和操作系统。因此,如果您设备的内部时钟分辨率过高,System.nanoTime()
将无法改善效果。
有没有更好的方法来尝试测量此方法执行和返回的时间?
您可以多次运行该方法以增加花费的时间。但请注意,基准测试是一项复杂的艺术。您可以从这篇文章开始:How do I write a correct micro-benchmark in Java?虽然它侧重于热点JVM,但大多数原则都适用于Dalvik。