Java ‐ Benchmark - thought-corner/backend-roadmap GitHub Wiki

JMH가 뭔가?

  • JVM(Java Microbenchmark Harness)란, OpenJDK 팀이 만든 Java 코드의 성능을 정확히 측정하기 위한 공식 도구이다.
  • "이 메서드가 얼마나 빠른가"를 믿을 수 있는 숫자로 측정하는 것이 목적이다.

왜 직접 재면 안 되는가?

함정 무슨 일이 벌어지는지? 결과
JIT 워밍업 처음엔 인터프리터로 느리다가 수천 번 후 기계어로 컴파일되어 빨라진다. 측정 시점에 따라 숫자가 요동친다.
죽은 코드 제거 결과를 안 쓰면 JIT가 계산을 통째로 삭제한다. 0에 가까운 거짓 결과
상수 폴딩 입력이 상수면 컴파일 타임에 미리 계산한다. 실제 연산을 안 잰다.
루프 최적화 반복문을 재작성/제거 반복 횟수가 무의미해진다.

벤치마크 모드(@BenchmarkMode)

모드 재는 것 언제
Throughput 초당 처리 횟수 얼마나 많이 처리하나
AverageTime 1회 평균 소요 시간 한 번에 얼마나 걸리나
SampleTime 지연 분포(p50/p95/p99) 꼬리 지연이 궁금할 때
SingleShortTime 콜드 스타트 1회 예열 없이 첫 실행 비용이 얼마인지