-2
다음 코드가 주어지면 어느 것이 더 효율적입니까? 실제 메소드 returnSomething()은 실제로 0을 리턴 할 수 있으므로 try/catch가 필요합니다. 내가 프로세서 사용의 측면에서 더 효율적입니다 코드의 어느 부분 이해하려고 노력했다코드 조각을 실행하는 데 걸리는 시간을 측정하면 코드가 얼마나 효율적인 지 알 수 있습니까? JAVA
//piece one
long sleepTime = 200;
try{ sleepTime /= returnSomething();}
catch(Exception e){sleepTime = 200;}
private int returnSomething(){
return 1;
}
//or
//piece two
long sleepTime = 200;
if(returnSomething() == 3){sleepTime = 67;}
else if(returnSomething() == 2){sleepTime = 100;}
else if(returnSomething() == 1){sleepTime = 200;}
private int returnSomething(){
return 1;
}
, 그들은 같은 일을 BOT. 테스트를 위해 작성한 코드가 목적에 부합하는지 또는 코드에서 다른 종류의 테스트를 수행 할 수 있는지 여부를 알고 싶습니다. 필자의 발견에 따르면 하드 코드 if 문과 마지막 if 문이 항상 실행되지만 조각 2는 9 배 더 효율적입니다 (실행 시간이 9 배 짧음).
전체 작업 프로그램
public class CodePerformanceTester
{
public static void main(String[] args){
CodePerformanceTester tester = new CodePerformanceTester();
tester.start();
}
public void start(){
double start = System.currentTimeMillis();
long sleepTime = 200;
for(int i=0; i<10000000; i++){
//uncoment here the two lines below
//try{ sleepTime /= returnSomething();}
//catch(Exception e){sleepTime = 200;}
//coment the IF STATEMENTS when above code uncomented
if(returnSomething() == 3){sleepTime = 67;}
else if(returnSomething() == 2){sleepTime = 100;}
else if(returnSomething() == 1){sleepTime = 200;}
}
double end = System.currentTimeMillis();
System.out.println("Execution time for 10 million iteration was "+(end-start)+" ms.");
}
private int returnSomething(){
return 1;
}
}
JVM은 코드가 언제, 어디서 어떻게 호출되는지에 따라 다소 효과적 일 수 있다는 점에서 재미 있습니다. 병목이 어디 있는지 확인하고 문제를 해결하려면 프로파일 러를 사용하는 것이 가장 좋습니다. 이를 막으려면 메소드를 여러 번 반복해야하며 여러 번 시도해 봐야하며 테스트 순서를 바꿔 어떤 것이 더 빠르는지 확인해야합니다. –
예에서 returnSomething은 1을 반환하고 JVM이 인라인으로 코드를 최적화 할 가능성이 큽니다 ... – assylias
간단한 코드 조각에 마이크로 벤치 마크가 있습니다. int ret = returnSomething); sleepTime = 200/(ret == 0? 1 : ret);': 임시 변수에서 뭔가를 반환하고 0 만 확인하면보다 강력 해집니다. IMO –