System.nanoTime() を使用して、いくつかのメソッドを呼び出すのにかかる時間を測定しています。これらの各メソッドで、各メソッドにかかる時間を測定するために同じことを行います。結局、経過時間の合計は合計経過時間よりも小さいはずだ、と私は思った。しかし、そうではありません。
例:
public static void main(String[] args){
long startTime = System.nanoTime();
method1();
method2();
method3();
System.out.println( "Total Time: " + (System.nanoTime() - startTime) / 1000000);
}
private void method1(){
long startTime = System.nanoTime();
//Stuff
System.out.println( "Method 1: " + (System.nanoTime() - startTime) / 1000000);
}
// same for all other methods
私の場合、合計時間は約 950 ミリ秒ですが、各経過時間の合計は 1300 ミリ秒以上です。どうしてこれなの?
編集:
さて、少し明確にするために、配列に何度も書き込むときにこの動作が発生しません(これはテストとして行いました)。これを行うと、ほぼ正確な結果 (+-1ms) が得られます。
私が実際にやっていることはこれです:
2 つのかなり巨大なテキスト ファイルを文字列配列に読み込みました (最初のファイルで 1000 * ~2000 文字、2 番目のファイルで 200 * ~100 文字)。
次に、最初のファイルを読み取って取得した String 配列に対して多くの比較を行い、その結果を使用して確率を計算します。
EDIT2:私の側のエラーです。メソッド内でメソッドを呼び出していて、それらの時間も合計しましたが、これはすでに含まれています。これらの二重時間がなければ、すべてが加算されます。これをクリアしてくれてありがとう!