Language/Java
[JAVA] 마이크로벤치마크(Microbenchmarks)
겸손한개발자
2020. 8. 26. 17:57
마이크로벤치마크(Microbenchmarks)란?
- 성능 테스트(Benchmarking)의 방식 중 하나입니다
- 매우 작은 단위의 성능을 테스트하기 위해 고안되었습니다
- 작은 단위의 업무나 특정 알고리즘의 간접적인 처리시간(overhead)를 구합니다
기본적인 마이크로벤치마킹 방법
public class Microbenchmark {
public static void main(String[] args) {
Microbenchmark mb = new Microbenchmark();
mb.microTest();
}
public void microTest(){
long result;
long start = System.currentTimeMillis(); //단위업무 시작시간
for(int i = 0 ; i < 2 ; i++){
result = fibo(40);
}
long done = System.currentTimeMillis(); //단위업무 종료시간
System.out.println("수행시간: " + (done - start)); //업무처리수행시간
}
private long fibo(int n){
if(n==0) return 0L;
if(n==1) return 1L;
long d = fibo(n-2)+fibo(n-1);
return d;
}
}
예열기간(Warm up period)
자바는 코드가 여러 번 실행될수록 더 좋은 성능을 발휘하는 특징이 있습니다. 따라서 시간 측정 이전에 테스트 커널을 완전히 실행하는 예열 단계가 있어야 합니다. 만약 예열 단계를 거치지 않는다면, 해당 업무의 처리 성능보다는 컴파일 성능을 측정하는 것이 됩니다.
public class Microbenchmark {
public static void main(String[] args) {
Microbenchmark mb = new Microbenchmark();
mb.microTest(true); //예열단계
mb.microTest(false); //성능측정단계
}
public void microTest(boolean isWarmup){
long result;
long start = System.currentTimeMillis(); //단위업무 시작시간
for(int i = 0 ; i < 2 ; i++){
result = fibo(40);
}
if(!isWarmup){
long done = System.currentTimeMillis(); //단위업무 종료시간
System.out.println("수행시간: " + (done - start)); //업무처리수행시간
}
}
private long fibo(int n){
if(n==0) return 0L;
if(n==1) return 1L;
long d = fibo(n-2)+fibo(n-1);
return d;
}
}
해당내용은 개인적으로 학습한 내용을 정리한 게시글입니다.
피드백 및 토론, 질문 모두 환영입니다.
참조 https://wiki.openjdk.java.net/display/HotSpot/MicroBenchmarks
MicroBenchmarks - HotSpot - OpenJDK Wiki
wiki.openjdk.java.net