0

メソッド呼び出しの実行にかかる時間を試して判断するための次のコードがあります。

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) で実行すると、この diff (終了 - 開始) はほとんどの場合 0 になります。

これの理由は何ですか?このメソッドの実行と戻りにかかる時間を測定するためのより良い方法はありますか?

*他の Android デバイスの動作は異なることに注意してください

4

1 に答える 1

1

これの理由は何ですか?

System.nanoTime()の解像度はデバイスと OS に依存します。したがって、デバイスの内部クロックの解像度が高すぎるSystem.nanoTime()と、改善できません。

このメソッドの実行と戻りにかかる時間を測定するためのより良い方法はありますか?

メソッドを複数回実行して、費やされる時間を増やすことができます。ただし、ベンチマークは複雑な技術であることに注意してください。この投稿から始めることができます: How do I write a correct micro-benchmark in Java? ホットスポット JVM に焦点を当てていますが、ほとんどの原則は Dalvik に適用されます。

于 2013-07-23T10:42:49.877 に答える