JAVA · 성능/JVM
JMH — Java 마이크로벤치마크
JMH(Java Microbenchmark Harness)로 신뢰할 수 있는 성능 측정을 합니다.
성능/JVM고급JMHbenchmark@Warmup@Measurement@State
핵심 설명
JMH(Java Microbenchmark Harness)로 신뢰할 수 있는 성능 측정을 합니다.
Java code
import org.openjdk.jmh.annotations.*;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.options.OptionsBuilder;
import java.util.*;
import java.util.concurrent.TimeUnit;
@State(Scope.Benchmark)
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MICROSECONDS)
@Warmup(iterations = 3, time = 1)
@Measurement(iterations = 5, time = 1)
@Fork(1)
public class StringConcatBenchmark {
@Param({"10", "100", "1000"})
int count;
private String[] words;
@Setup
public void setup() {
words = new String[count];
for (int i = 0; i < count; i++) {
words[i] = "word" + i;
}
}
@Benchmark
public String stringPlus() {
String result = "";
for (String w : words) result += w;
return result;
}
@Benchmark
public String stringBuilder() {
var sb = new StringBuilder(count * 6);
for (String w : words) sb.append(w);
return sb.toString();
}
@Benchmark
public String stringJoin() {
return String.join("", words);
}
@Benchmark
public String streamCollect() {
return Arrays.stream(words)
.collect(java.util.stream.Collectors.joining());
}
// 실행 방법:
// mvn package
// java -jar target/benchmarks.jar
// 또는
// public static void main(String[] args) throws Exception {
// new Runner(new OptionsBuilder()
// .include(StringConcatBenchmark.class.getSimpleName())
// .build()).run();
// }
}학습 팁
JVM의 JIT 컴파일러 때문에 단순 루프 타이밍은 신뢰할 수 없습니다. JMH는 워밍업, 데드코드 제거 방지, 통계 처리를 모두 해줍니다.
주의할 점
JMH 없이 System.currentTimeMillis()로 측정하면 JVM JIT 최적화로 결과가 완전히 다를 수 있습니다. 특히 첫 실행과 반복 실행의 차이가 큽니다.
자주 묻는 질문
JMH — Java 마이크로벤치마크란 무엇인가요?
JMH(Java Microbenchmark Harness)로 신뢰할 수 있는 성능 측정을 합니다.
JMH — Java 마이크로벤치마크 학습 시 주의할 점은 무엇인가요?
JMH 없이 System.currentTimeMillis() 로 측정하면 JVM JIT 최적화로 결과가 완전히 다를 수 있습니다. 특히 첫 실행과 반복 실행의 차이가 큽니다.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.