[jmh] benchmark test
단순한 자바 성능 테스트를 하기 위한 툴로 benchmark가 있다. 간단하게 세팅하고 실행해본다.
환경: java 11 / gradle 7.4
1. intellij에서 gradle로 프로젝트 생성
2. 파일 구조 아래와 같이 만들기
main/test 폴더 삭제
3. build.gradle에 plugin 추가
plugins {
id 'java'
id "me.champeau.jmh" version "0.6.6"
}
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
}
test {
useJUnitPlatform()
}
dependency에 추가하는 게 아니었다..
4. benchmark code 작성
private static List<Integer> list = new ArrayList<>();
static {
for(int i=0; i < 1_000_000; i++) {
list.add(i);
}
}
@Benchmark
@Fork(value = 1, warmups = 1)
@BenchmarkMode(Mode.Throughput)
public void usingStream(Blackhole blackhole) {
list.stream().forEach(i -> blackhole.consume(i));
}
@Benchmark
@Fork(value = 1, warmups = 1)
@BenchmarkMode(Mode.Throughput)
public void usingIterator(Blackhole blackhole) {
list.listIterator().forEachRemaining(i -> blackhole.consume(i));
}
5. 테스트 실행
터미널에 gradle jmh로 실행(intellij run 버튼이나 다른 걸로 하면 에러남)
이렇게 그냥 실행하면 jmh 기본 설정 값으로 테스트를 진행한다(warmup을 5번 하고 등등..).
기본적인 테스트임에도 시간이 상당히 걸리는데, 아래 readme를 참고하면 옵션들을 바꿀 수 있어 다양한 값으로 테스트가 가능하다.
공통 룰에 대한 옵션은 build.gradle의 jmh{}(블록) 안에다 작성하면 된다. 그 외 각 테스트 별로 어노테이션을 통한 개별 옵션을 줄 수도 있다.
jmh README: https://github.com/melix/jmh-gradle-plugin#configuration-options
GitHub - melix/jmh-gradle-plugin: Integrates the JMH benchmarking framework with Gradle
Integrates the JMH benchmarking framework with Gradle - GitHub - melix/jmh-gradle-plugin: Integrates the JMH benchmarking framework with Gradle
github.com
https://mkyong.com/java/java-jmh-benchmark-tutorial/
Java JMH Benchmark Tutorial - Mkyong.com
- Java JMH Benchmark Tutorial
mkyong.com