JIT(Just-In-TIme) Complination

2025. 7. 7. 15:06ยทJAVA

๐Ÿ“Œ 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๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ์ฑ„ํƒํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”„ ๋™์ž‘ ์ˆœ์„œ

  1. ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉฐ ํ†ต๊ณ„ ์ˆ˜์ง‘
  2. ์ž์ฃผ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ ๋ฐœ๊ฒฌ ์‹œ → C1์ด ๋น ๋ฅด๊ฒŒ ์ปดํŒŒ์ผ
  3. ์ˆ˜์ง‘๋œ ์‹คํ–‰ ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ C2๊ฐ€ ๊ณ ๊ธ‰ ์ตœ์ ํ™” ์ˆ˜ํ–‰
  4. ๊ณ ์„ฑ๋Šฅ 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
'JAVA' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • GC(Garbage Collection)
  • Stack vs Heap
  • ์Šค๋ ˆ๋“œ์™€ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ
  • JMM
moonwhistle
moonwhistle
  • moonwhistle
    OrangeBanana
    moonwhistle
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ (113)
      • [Spring] - Study (11)
        • CS (0)
        • Project - ๋ชจ๊ฐ๋ฐฅ(๋ชจ์—ฌ์„œ ๊ฐ์ž ๋ฐฅ๋จน๊ธฐ) (7)
        • Project - CoinFlow(๋น„ํŠธ์ฝ”์ธ ์ฐจํŠธ) (4)
      • ์˜คํ”ˆ์†Œ์Šค (1)
      • ๐Ÿ“– DB (1)
      • JAVA (6)
      • ์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค[ํ”„๋ฆฌ์ฝ”์Šค] (15)
      • [Spring] - ๋ฉ˜ํ† ๋ง (30)
        • ๋ฏธ์…˜ (13)
        • ๊ฐœ๋… (16)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜ (2)
      • ๐Ÿ’ฌ ์ƒ๊ฐ์ƒ๊ฐ (3)
        • F-lap (2)
      • ํ†ต์‹  (34)
        • ๋„คํŠธ์›Œํฌ ํ”„๋กœํ† ์ฝœ (18)
        • ๋ฐ์ดํ„ฐํ†ต์‹  (16)
      • ์šฉ์ ‘ (8)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
    • ์นดํ…Œ๊ณ ๋ฆฌ
    • ์ดˆ๋ก์Šคํ„ฐ๋””
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    jmm
    garbage collection
    KAFKA
    ๋ฉ€ํ‹ฐ๋ชจ๋“ˆ
    F-Lab
    GC
    multimodule
    ์„ค๊ณ„
    ์ฝ”์ธ
    spring
    Flow
    Synchronized
    volatile
    data
    ํ›„๊ธฐ
    redis
    ์—ํ”„๋žฉ
    Java
    ๋™์‹œ์„ฑ
    ํŠธ๋žœ์žญ์…˜
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.4
moonwhistle
JIT(Just-In-TIme) Complination
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”