๐ 1. ๊ฐ์ – JIT ์ปดํ์ผ๋ฌ๋?
Java๋ "ํ ๋ฒ ์์ฑํ๋ฉด ์ด๋์๋ ์คํ"์ ๋ชฉํ๋ก ํ๊ธฐ ๋๋ฌธ์, Java ์ฝ๋๋ .java → .class๋ก ๋ณํ๋์ด ๋ฐ์ดํธ์ฝ๋๋ก ์คํ๋ฉ๋๋ค. JVM์ ์ด ๋ฐ์ดํธ์ฝ๋๋ฅผ ์ธํฐํ๋ฆฌํ
ํ๋ฉด์ ์คํํ์ง๋ง, ์ด ๋ฐฉ์์ ์๋๊ฐ ๋๋ฆฝ๋๋ค.
๊ทธ๋์ ๋ฑ์ฅํ ๊ฒ์ด JIT(Just-In-Time) ์ปดํ์ผ๋ฌ์ ๋๋ค.
JIT ์ปดํ์ผ๋ฌ๋ ์คํ ์ค ์์ฃผ ํธ์ถ๋๋ ๋ฉ์๋(Hot Method)๋ฅผ ๊ฐ์งํ์ฌ, ํด๋น ๋ฐ์ดํธ์ฝ๋๋ฅผ Native Code(๊ธฐ๊ณ์ด)๋ก ๋ณํํ์ฌ ์ฑ๋ฅ์ ๊ทน์ ์ผ๋ก ํฅ์์ํต๋๋ค.
โ๏ธ 2. JIT ์ปดํ์ผ ๋์ ํ๋ฆ
.java → javac → .class (Bytecode)
↓
JVM์ด ์คํ ์ค ๋ถ์
↓
JIT Compiler๊ฐ "ํซ์คํ" ๋ฉ์๋ ํ์ง
↓
Bytecode → Native Machine Code๋ก ๋ณํ
↓
์ดํ ํด๋น ๋ฉ์๋๋ JVM์ด ์๋ CPU๊ฐ ์ง์ ์คํ
๐ 3. JIT ์คํ ๋ฐฉ์
| ๋จ๊ณ | ์ค๋ช |
|---|---|
| 1 | JVM์ด ์ฒ์์ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์ธํฐํ๋ฆฌํธ(ํ ์ค์ฉ ํด์) |
| 2 | ํน์ ๋ฉ์๋๊ฐ ์์ฃผ ํธ์ถ๋๋ฉด → JIT์ด ํซ ๋ฉ์๋๋ก ๊ฐ์ง |
| 3 | ํด๋น ๋ฉ์๋๋ฅผ Native Code๋ก ์ปดํ์ผ |
| 4 | ์ดํ ํด๋น ๋ฉ์๋๋ CPU๊ฐ ์ง์ ์คํ |
๐๏ธ 5. JIT ์ปดํ์ผ์ ์ต์ ํ ๊ธฐ๋ฒ๋ค
| ์ต์ ํ ๊ธฐ๋ฒ | ์ค๋ช |
|---|---|
| Inlining | ๋ฉ์๋ ํธ์ถ ์์ด ์ง์ ์ฝ๋ ์ฝ์ (ํธ์ถ ์ค๋ฒํค๋ ์ ๊ฑฐ) |
| Loop Unrolling | ๋ฐ๋ณต๋ฌธ ์์ ์ฝ๋๋ฅผ ๋ณต์ ํด ๋ฐ๋ณต ํ์ ์ค์ |
| Escape Analysis | ๊ฐ์ฒด๊ฐ ๋ฉ์๋ ๋ฐ์ผ๋ก ๊ณต์ ๋์ง ์์ผ๋ฉด ํ ๋์ ์คํ์ ํ ๋น |
| Dead Code Elimination | ์คํ๋์ง ์๋ ๋ถํ์ํ ์ฝ๋ ์ ๊ฑฐ |
| Branch Prediction | if/switch ๋ฑ์ ๋ถ๊ธฐ๋ฌธ ์คํ ๊ฒฝ๋ก ์์ธก |
| Inline Caching | ๋ฉ์๋ ํธ์ถ ์ ์ค์ ํด๋์ค ๊ธฐ์ต → ๋น ๋ฅธ ์คํ |
๐ฅ 6. HotSpot JVM์ C1, C2 ์ปดํ์ผ๋ฌ ๊ตฌ์กฐ
HotSpot JVM์ JIT์ 2๋จ๊ณ๋ก ๋๋ ์ ์ต์ ํํฉ๋๋ค.
| ์ปดํ์ผ๋ฌ | ํน์ง | ์ฉ๋ |
|---|---|---|
| C1 (Client) | ๋น ๋ฅธ ์ปดํ์ผ, ๊ธฐ๋ณธ ์ต์ ํ | UI/๋น ๋ฅธ ์๋ต์ด ์ค์ํ ์ฑ |
| C2 (Server) | ๋๋ฆฌ์ง๋ง ์ ๊ตํ ๊ณ ๊ธ ์ต์ ํ | ์ฅ๊ธฐ ์คํ ์๋ฒ ํ๊ฒฝ์ ์ ํฉ |
๐งฌ 7. Tiered Compilation (๊ณ์ธตํ ์ปดํ์ผ)
HotSpot JVM์ C1๊ณผ C2๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ๊ตฌ์กฐ๋ฅผ ์ฑํํฉ๋๋ค.
๐ ๋์ ์์
- ์ธํฐํ๋ฆฌํฐ๊ฐ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์คํํ๋ฉฐ ํต๊ณ ์์ง
- ์์ฃผ ํธ์ถ๋๋ ๋ฉ์๋ ๋ฐ๊ฒฌ ์ → C1์ด ๋น ๋ฅด๊ฒ ์ปดํ์ผ
- ์์ง๋ ์คํ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก C2๊ฐ ๊ณ ๊ธ ์ต์ ํ ์ํ
- ๊ณ ์ฑ๋ฅ Native Code ์์ฑ → Code Cache์ ์ ์ฅ → CPU ์ง์ ์คํ
๐ 8. ์ธ๋ผ์ธ ์ต์ ํ๋ ๋ชจ๋ ์ต์ ํ์ ๊ธฐ์ด
"Inlining์ ๋ค๋ฅธ ์ต์ ํ ๊ธฐ๋ฒ์ ๊ธฐ๋ฐ์ด๋ค"
| ์ธ๋ผ์ด๋ ํ ๊ฐ๋ฅํ ์ต์ ํ |
|---|
| Constant Folding |
| Escape Analysis |
| Loop Unrolling |
| Dead Code Elimination |
| Branch Prediction ๋ฑ |
๐งฉ 9. JIT๊ณผ GC์ ๋น๊ต
| ํญ๋ชฉ | JIT Compiler | Garbage Collector |
|---|---|---|
| ๋ชฉ์ | CPU ์ฐ์ฐ ์ต์ ํ | ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ต์ ํ |
| ์์น | Execution Engine | JVM ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์์ญ |
| ๋ฐฉ์ | ๋ฐํ์ ์ค ๋ค์ดํฐ๋ธ ์ฝ๋ ์์ฑ | ๋ฐํ์ ์ค ๋ถํ์ํ ๊ฐ์ฒด ์๊ฑฐ |
โ ๏ธ 10. JIT ๊ด๋ จ ์ด์ (์คํ ์ค ๋ฐ์ ๊ฐ๋ฅ)
| ์ด์ | ์ค๋ช |
|---|---|
| ๋์ตํฐ๋ง์ด์ ์ด์ | ๊ฐ์ ๊ธฐ๋ฐ ์ต์ ํ๊ฐ ๊นจ์ง๋ฉด ๋ค์ ์ธํฐํ๋ฆฌํ ์ผ๋ก ํ๊ท |
| ๊ณผ๋ํ ์ธ๋ผ์ด๋ | ๋ฉ์๋๊ฐ ๋๋ฌด ๋ง์ด ์ธ๋ผ์ธ๋์ด ์บ์ ํจ์จ ์ ํ |
| ๋ถ๊ธฐ ์์ธก ์คํจ | ์ค์ ์คํ ๊ฒฝ๋ก๊ฐ ์์๊ณผ ๋ค๋ฅด๋ฉด ์ฑ๋ฅ ์ ํ |
| ๋ฉํฐ์ค๋ ๋ ํ๊ณ | ๋๊ธฐํ ์ฝ๋(volatile, synchronized)์ ๋ณด์์ ์ผ๋ก ์๋ |
| GC์ ์ํธ์์ฉ | GC ํ์ด๋ฐ๊ณผ JIT ์ต์ ํ๊ฐ ์ถฉ๋ ์ ํ๋ ์ฑ๋ฅ ๋ฐ์ ๊ฐ๋ฅ |
๐ ๏ธ 11. JIT ๊ด๋ จ JVM ์ต์
| ์ต์ | ์ค๋ช |
|---|---|
-XX:+PrintCompilation |
JIT ์ปดํ์ผ๋ ๋ฉ์๋ ์ถ๋ ฅ |
-XX:+PrintInlining |
์ด๋ค ๋ฉ์๋๊ฐ ์ธ๋ผ์ด๋ ๋์๋์ง ์ถ๋ ฅ |
-XX:+TieredCompilation |
C1 + C2 ํจ๊ป ์ฌ์ฉ (๊ธฐ๋ณธ๊ฐ: true) |
-XX:CompileThreshold=10000 |
๋ฉ์๋๊ฐ Hot Method๋ก ๊ฐ์ฃผ๋๋ ํธ์ถ ํ์ ๊ธฐ์ค |
๐ ์ฐธ๊ณ ์๋ฃ
- OpenJDK - Tiered Compilation ๊ณต์ ๋ฌธ์
- Oracle Java Tuning Guide
- ใJava Performance: The Definitive Guideใ - Scott Oaks
์๋ชป๋ ๋ถ๋ถ์ด๋ ๋น ์ง ์ง์์ด ์์ผ๋ฉด ์ธ์ ๋ ํผ๋๋ฐฑ ๋ถํ๋๋ฆฝ๋๋ค!
'JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| G1 GC vs CMS GC (2) | 2025.07.26 |
|---|---|
| GC(Garbage Collection) (2) | 2025.07.26 |
| Stack vs Heap (1) | 2025.07.10 |
| ์ค๋ ๋์ ๋ฉํฐ์ค๋ ๋ (0) | 2025.07.07 |
| JMM (0) | 2025.07.07 |