PHpullh
학습 라이브러리/Java/JMH 벤치마크 실전

JAVA · 성능/JVM

JMH 벤치마크 실전

JMH로 컬렉션 성능을 비교하는 실전 벤치마크입니다.

성능/JVM고급JMH벤치마크Blackhole성능측정

핵심 설명

JMH로 컬렉션 성능을 비교하는 실전 벤치마크입니다.

Java code

// JMH 벤치마크 실전 예시

// @BenchmarkMode(Mode.Throughput)
// @OutputTimeUnit(TimeUnit.MILLISECONDS)
// @State(Scope.Benchmark)
// @Warmup(iterations = 3)
// @Measurement(iterations = 5)
// @Fork(1)
// public class CollectionBenchmark {
//     @Param({"100", "10000", "1000000"})
//     int size;
//
//     List<Integer> arrayList;
//     LinkedList<Integer> linkedList;
//
//     @Setup
//     public void setup() {
//         arrayList = new ArrayList<>(IntStream.range(0, size)
//             .boxed().toList());
//         linkedList = new LinkedList<>(arrayList);
//     }
//
//     @Benchmark
//     public int arrayListGet() { return arrayList.get(size / 2); }
//
//     @Benchmark
//     public int linkedListGet() { return linkedList.get(size / 2); }
//
//     @Benchmark
//     public void arrayListIterate(Blackhole bh) {
//         for (int i : arrayList) bh.consume(i);
//     }
//
//     @Benchmark
//     public void linkedListIterate(Blackhole bh) {
//         for (int i : linkedList) bh.consume(i);
//     }
// }

class Main {
    public static void main(String[] args) {
        System.out.println("JMH 핵심 어노테이션:");
        System.out.println("@Benchmark: 벤치마크 메서드");
        System.out.println("@State: 상태 스코프 (Benchmark, Thread)");
        System.out.println("@Setup/@TearDown: 초기화/정리");
        System.out.println("@Param: 파라미터화된 벤치마크");
        System.out.println("Blackhole: 데드코드 제거 방지");
    }
}

학습 팁

Blackhole.consume()으로 JIT가 결과를 사용하지 않는 코드를 제거하는 것을 방지합니다. 벤치마크 결과의 정확성에 필수입니다.

주의할 점

@Setup(Level.Invocation)은 매 호출마다 실행되어 측정에 포함될 수 있습니다. 대부분 Level.Trial이 적합합니다.

자주 묻는 질문

JMH 벤치마크 실전란 무엇인가요?

JMH로 컬렉션 성능을 비교하는 실전 벤치마크입니다.

JMH 벤치마크 실전 학습 시 주의할 점은 무엇인가요?

@Setup(Level.Invocation) 은 매 호출마다 실행되어 측정에 포함될 수 있습니다. 대부분 Level.Trial 이 적합합니다.

Continue Learning

Java 학습을 이어가세요

총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.