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 메타데이터를 가집니다.