JMH
JMH(Java Microbenchmark Harness)๋ Java ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง์ดํฌ๋ก ๋ฒค์น๋งํฌ๋ฅผ ์์ฑํ๊ธฐ ์ํ ํ๋ ์์ํฌ์ ๋๋ค. ๋จ์ํ ์ฑ๋ฅ ํ ์คํธ ์ฝ๋๋ก ์ธํด ๋ฐ์ํ ์ ์๋ JVM ์ต์ ํ(JIT, Dead Code Elimination ๋ฑ) ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ณ , ์ ํํ๊ณ ์ ๋ขฐํ ์ ์๋ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํฉ๋๋ค.
JMH๋ JVM ์๋ฐ์ , ์ค๋ ๋ฉ ์ต์ , ์ฑ๋ฅ ์ธก์ ๋ฐ๋ณต ๋ฑ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ๋ฒค์น๋งํน ๊ณผ์ ์์ ๋ฐ์ํ ์ ์๋ ํํ ์ค์๋ฅผ ์๋ฐฉํฉ๋๋ค.
ํน์ง
JIT ์ต์ ํ ๋ฐฉ์ง: JVM์ ํซ์คํ ์ปดํ์ผ๋ฌ๊ฐ ๋ฒค์น๋งํฌ ๊ฒฐ๊ณผ๋ฅผ ์๊ณกํ์ง ์๋๋ก ๊ด๋ฆฌ.
๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ ์ง์: ๋์์ฑ ํ ์คํธ๋ฅผ ์ฝ๊ฒ ์ค์ ๊ฐ๋ฅ.
์ ํํ ์ฑ๋ฅ ์ธก์ : Warm-up, Iteration, Fork ์ค์ ์ ํตํ ์์ ์ ์ธ ๊ฒฐ๊ณผ ์ ๊ณต.
์ฌ์ฉ ํธ๋ฆฌ์ฑ: ์ด๋ ธํ ์ด์ ๊ธฐ๋ฐ ์ค์ ์ผ๋ก ์ฝ๊ฒ ์์ฑ ๊ฐ๋ฅ.
์ค์ ๋ฐฉ๋ฒ
Maven ํ๋ก์ ํธ์ JMH ์ถ๊ฐ
Gradle ํ๋ก์ ํธ์ JMH ์ถ๊ฐ
JMH ์ฌ์ฉ๋ฒ
mvn clean install
๋๋./gradlew jmhJar
๋ก ๋น๋.์คํ:
๋๋
์ฃผ์ ์ด๋
ธํ
์ด์
๋ฐ ์ค์
@Benchmark: ๋ฒค์น๋งํฌ ํ ์คํธ ๋ฉ์๋ ํ์.
@BenchmarkMode: ๋ฒค์น๋งํฌ ์ธก์ ๋ชจ๋ ์ค์ (์: Throughput, AverageTime, SampleTime, AllModes ๋ฑ).
@OutputTimeUnit: ๊ฒฐ๊ณผ์ ์๊ฐ ๋จ์ ์ค์ .
@State: ๋ฒค์น๋งํฌ ์คํ ์ํ๋ฅผ ๋ํ๋ด๋ ๊ฐ์ฒด ์ค์ฝํ ์ค์ (Thread, Group, Singleton).
@Setup / @TearDown: ๋ฒค์น๋งํฌ ์ค๋น ๋ฐ ์ ๋ฆฌ ์์ ์ง์ .
@Param: ํ๋ผ๋ฏธํฐ๋ฅผ ์ค์ ํ์ฌ ๋ค์ํ ์ ๋ ฅ๊ฐ ํ ์คํธ ๊ฐ๋ฅ.
6. JMH ์คํ ์ ์ฃผ์ ์ค์
Fork: JVM ํ๋ก์ธ์ค๋ฅผ ๋ช ๋ฒ ์ฌ์์ํ์ฌ ๋ฒค์น๋งํฌ ์คํํ ์ง ๊ฒฐ์ .
Warmup: JVM ์๋ฐ์ ์ ๋ช ๋ฒ ๋ฐ๋ณตํ ์ง ์ค์ .
Measurement: ์ค์ ๋ฒค์น๋งํฌ ๋ฐ๋ณต ํ์.
Last updated