프로그래밍 언어로 시계 시간에 문제가있는 것은 이번이 처음이 아닙니다. 기본적으로 필자는 while 루프에서 함수를 호출하여 함수의 실행 속도를 측정하고 있습니다. 문제는 어떤 이유로 루프가 돌아가는 데 걸리는 시간이 길어질수록 경과 시간이 짧아지는 것입니다. 아무도 설명 할 수 있을까요? 아래 코드.Java System.nanoTime 경과 평균 시간이 점점 작아짐
DescriptiveStatistics stats = new DescriptiveStatistics();
while(true) {
long startTime = System.nanoTime();
executeSaxonXsltTransformation();
long stopTime = System.nanoTime();
long elapsedTime = stopTime-startTime;
stats.addValue((double)elapsedTime);
System.out.println(stats.getN()+" - "+elapsedTime+ " - "+stats.getMean());
}
따라서 약 1,000 회 실행 한 후 경과 시간은 750k - 850k입니다. 그러나 약 100,000 회 실행 한 후 경과 시간은 580k에서 750k로 떨어집니다. 연속 감소는 평균 (stats.getMeans())을 관찰하면 가장 잘 나타납니다.이 통계는 108k 루프가 평균 ~ 632k인데 비해 3k 루프는 평균 1 백만입니다. nanoTime 대신 currentTimeMillis로 전환해도 아무런 변화가 없습니다.
감사합니다. 나는 이런 일이 일어나고 있다고 느꼈다. – Thirlan
Caliper는 요즘과 같이 일관된 벤치마킹 방법을 알고 있습니까? 필자가 마지막으로봤을 때, PrintCompilation의 결과는 매우 고무적이지 않았습니다. – kittylyst
캘리퍼스는 마이크로 벤치마킹이 매우 좋습니다. 나는 "매크로"벤치 마크에서 어떻게 작동하는지 알지 못한다는 것을 인정하지만, 작고 단단한 방법을 측정하기 위해서는 탁월합니다. –