KOTLIN · 성능
벤치마크 (JMH)
JMH(Java Microbenchmark Harness)로 정밀한 마이크로벤치마크를 작성합니다. JVM 최적화를 고려한 신뢰할 수 있는 측정입니다.
성능고급jmhbenchmarkmicrobenchmarkwarmup
핵심 설명
JMH(Java Microbenchmark Harness)로 정밀한 마이크로벤치마크를 작성합니다. JVM 최적화를 고려한 신뢰할 수 있는 측정입니다.
Kotlin code
// build.gradle.kts:
// plugins { id("me.champeau.jmh") version "0.7.2" }
// 실제 JMH 벤치마크 예시 (개념 코드)
// @State(Scope.Benchmark)
// @BenchmarkMode(Mode.AverageTime)
// @OutputTimeUnit(TimeUnit.NANOSECONDS)
// @Warmup(iterations = 3, time = 1)
// @Measurement(iterations = 5, time = 1)
open class CollectionBenchmark {
private val data = (1..10000).toList()
// @Benchmark
fun listFilterMap(): List<Int> =
data.filter { it % 2 == 0 }.map { it * 2 }
// @Benchmark
fun sequenceFilterMap(): List<Int> =
data.asSequence().filter { it % 2 == 0 }.map { it * 2 }.toList()
// @Benchmark
fun manualLoop(): List<Int> = buildList {
for (i in data) if (i % 2 == 0) add(i * 2)
}
}
// 간이 벤치마크 (JMH 없이)
fun simpleBench(name: String, iterations: Int = 1000, block: () -> Any?) {
// 워밍업
repeat(500) { block() }
// 측정
val start = System.nanoTime()
repeat(iterations) { block() }
val elapsed = (System.nanoTime() - start) / iterations
println("$name: ${elapsed}ns/op (${elapsed/1000}μs/op)")
}
fun main() {
val data = (1..10000).toList()
simpleBench("List chain") { data.filter { it % 2 == 0 }.map { it * 2 } }
simpleBench("Sequence chain") { data.asSequence().filter { it % 2 == 0 }.map { it * 2 }.toList() }
simpleBench("Manual loop") { buildList { for (i in data) if (i % 2 == 0) add(i * 2) } }
}학습 팁
JMH는 dead code elimination, constant folding 등 JVM 최적화를 방지하여 정확한 벤치마크를 보장합니다.
주의할 점
간이 벤치마크는 JVM 최적화로 인해 실제보다 빠르게 측정될 수 있습니다. 정밀한 결과가 필요하면 반드시 JMH를 사용하세요.
자주 묻는 질문
벤치마크 (JMH)란 무엇인가요?
JMH(Java Microbenchmark Harness)로 정밀한 마이크로벤치마크를 작성합니다. JVM 최적화를 고려한 신뢰할 수 있는 측정입니다.
벤치마크 (JMH) 학습 시 주의할 점은 무엇인가요?
간이 벤치마크는 JVM 최적화로 인해 실제보다 빠르게 측정될 수 있습니다. 정밀한 결과가 필요하면 반드시 JMH를 사용하세요.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.