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회 | 예열 없이 첫 실행 비용이 얼마인지 |