개발/java

[jmh] benchmark test

방푸린 2022. 8. 4. 14:35
반응형

단순한 자바 성능 테스트를 하기 위한 툴로 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

 

728x90
반응형