いくつかのメソッド ( ) の効率をチェックし、それらを全体的な実行時間と比較したかったのでfoo(int)
、最終的に次のようなものを書きました。
void testNanoTime(){
long methodDuration = 0;
long testStart = System.nanoTime();
for(int i= 0; i< 300; i++){
long startJob = System.nanoTime();
foo(i); //checking how foo does with certain data.
methodDuration+= System.nanoTime()-startJob;
bar();
}
System.out.println("MethodDuration: "+methodDuration);
System.out.println("TestDuration: "+(System.nanoTime()-testStart));
}
foo(int)
1 回の呼び出しで数分から 30 分 (合計で 293 年ではありません!) かかることもあります。問題は、TestDuration (メソッドにかかる時間全体) が methodDuration よりも小さい場合があることです。これは私には不可能に思えます。したがって、2 つの質問:
- methodDurations を比較する古いテストはどれくらい有効ですか?
- 無効なタイムスタンプを取得する危険を冒さずにパフォーマンスをさらにテストするには、何を使用すればよいですか? 行っても
System.currentTimeMillis()
安全ですか、それとも同じ問題がありますか?
現在、テストは Linux システムで行われています。ここで、この問題に関するいくつかの古い質問と回答を既に見つけました (例: Is System.nanoTime() 完全に役に立たない? ) が、一部の状態は Windows の問題であり、他の回答は言及されているように不明なままです。数歳でも)。ほとんどの答えでさえ互いに矛盾しています!