나는 Leetcode에 조각을 구현 한 내 초기 루프는 다음과 같이 실행 :Java에서 값이 0인지 확인하는 것보다 값이 0보다 큰지 빠르게 확인하고 있습니까? 그렇다면 왜?
//n and x are an integer and a double respectively
long N = Math.abs((long)n);
double result = 1;
while(N != 0){
if((N & 1) == 1){
result *= x;
}
N = N >> 1;
x *= x;
}
전체 코드가 실행 2ms의했다. 그런 다음 N != 0
을 N > 0
으로 변경했으며 코드를 실행하려면 1ms가 걸렸습니다. 왜이 변경으로 인해 런타임에 점프가 있었습니까? 즉, Java는 x != y
과 x > y
을 어떻게 구현합니까?
한 번 테스트 했습니까? 각 실행과 결과 사이에 시간차가 있기 때문에 성능면에서 큰 차이가 있다고 실제로 말하지 않습니다. 그것은 단지 표준입니다 "이번에는 xms가 걸렸습니다", 다음에 그것은 vica 운문일지도 모릅니다. – SomeJavaGuy
결함이 귀하의 테스트에있을 수 있습니다 생각 ... –
[자바의 마이크로 벤치 마크] 쓰기 (http://stackoverflow.com/questions/504103/how-do-i-write-a-correct-micro-benchmark) -in-java/513259)는 생각보다 훨씬 어렵습니다. 귀하의 측정치는 생각만큼 정확하지 않습니다. – Jesper