이 질문에는 이미 답변이 있습니다.
Java에서 일부 알고리즘의 복잡성을 분석해야합니다. 이를 위해 많은 수의 입력을 제공하고 Java 구현 시간을 측정 할 계획입니다. 일부 코드 줄 사이에서 시간을 검사하는 가장 정확하고 정확한 방법은 무엇입니까? 밀리 초 단위의 정밀도가 필요합니다 ...
를 사용하여 심지어 나노초 해상도를 얻을 수 있습니다.System.nanoTime()
.
그러나 다음 사항을 고려해야합니다.
Java로 정확한 마이크로 벤치 마크를 작성하려면 어떻게해야합니까?
다음과 같은 라이브러리를 사용하십시오.Speed4j. 이것은 호출을 벤치마킹 할뿐만 아니라 로그에 통계를 제공 할뿐만 아니라 JMX를 통해 원격으로 통계를 볼 수도 있습니다. System.current ..를 코드 전체에 두는 것보다는 그러한 라이브러리를 사용하는 것이 더 좋습니다.
현미경으로 찍고 싶은 특별한 방법이 있다고 해봅시다. 다음과 같이 할 수 있습니다.
long time1 = System.nanoTime();
thatMethod();
long time2 = System.nanoTime();
long timeTaken = time2 - time1;
System.out.println("Time taken " + timeTaken + " ns");
컴퓨터가 정말 빠르므로 사용하는 경우 시간 차이가 발생할 수 있습니다.getTimeMillis()
어쩌면 제로. 따라서,nanoTime()
당신은 또한 사용할 수 있습니다Caliper
. 그들은 비디오를 가지고 시작합니다. 또한 다음 질문에 대한 답변을 철저히 읽으십시오.creichen
. 그것에는 많은 훌륭한 것들이 있습니다.
용도System.nanoTime()
또는System.currentTimeMillis()
코드의 시작 및 종료 시간을 모두 얻으십시오. 마이크로 벤치 마크는 JVM 성능의 기본 측면만을 측정한다는 점을 기억하십시오. JVM의 워밍업 단계를 알고 있어야합니다.JIT시작되었습니다.
long start = System.currentTimeMillis();
// your code
long end = System.currentTimeMillis();
long diff = end-start;
또는
long start = System.nanoTime();
// your code
long end = System.nanoTime();
long diff = end-start;
long diffInMillis = diff/1000000;
long startTime = System.currentTimeMillis();
//code lines whose time you want to calculate
long endTime = System.currentTimeMillis();
System.out.println("Took "+(endTime - startTime) + " ms");
-1
이 다음 코드를 포맷하십시오. 이미 명시된 것을 진술하지 마십시오. - Little Child