π Just-In-Time Compilation JIT
Just-In-Time Compilation JIT β ΠΌΠ΅ΡΠΎΠ΄ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΊΠΎΠ΄ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, Π° Π½Π΅ Π·Π°ΡΠ°Π½Π΅Π΅. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΠΌΡΡ ΡΠ·ΡΠΊΠΎΠ².
π§ ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ
JIT ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΡ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ:
- ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ β Π±Π°ΠΉΡΠΊΠΎΠ΄ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Java Bytecode, .NET IL)
 - ΠΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π±Π°ΠΉΡΠΊΠΎΠ΄ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π² Machine Code
 - ΠΠΎΡΡΡΠΈΠ΅ ΡΡΠ°ΡΡΠΊΠΈ (hot paths) ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΡΡΡΡ Π°Π³ΡΠ΅ΡΡΠΈΠ²Π½ΠΎ
 - ΠΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΊΡΡΠΈΡΡΠ΅ΡΡΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ
 
ΠΡΠ°ΠΏΡ JIT-ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π°:
- Parser / IR Generator
 - Hotspot Detection
 - Code Optimizer (SSA, inlining, LICM, etc.)
 - Assembler Backend
 - Code Cache
 - Deoptimizer (Π²ΠΎΠ·Π²ΡΠ°Ρ ΠΊ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΡ ΠΏΡΠΈ ΠΎΡΠΈΠ±ΠΊΠ΅)
 
ΠΠΈΠ΄Ρ JIT:
- Baseline JIT β Π±ΡΡΡΡΠ°Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π±Π΅Π· ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ
 - Optimizing JIT β ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Π½ΠΎ Ρ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΠΌΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠΌΠΈ
 - Tiered JIT β Π³ΠΈΠ±ΡΠΈΠ΄: ΡΠ½Π°ΡΠ°Π»Π° baseline, Π·Π°ΡΠ΅ΠΌ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΡΡΠΈΠΉ
 - AOT + JIT β ΡΠ°ΡΡΡ ΠΊΠΎΠ΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π·Π°ΡΠ°Π½Π΅Π΅, ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅ β Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
 
βοΈ ΠΠ΄Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ
| Π‘ΡΠ΅Π΄Π° ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ | JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ | 
|---|---|
| Java (JVM) | HotSpot JIT, Graal, C2 | 
| .NET (CLR) | RyuJIT, Mono | 
| JavaScript Engine | V8 (Chrome), SpiderMonkey (Firefox) | 
| Python | PyPy (JIT-ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ) | 
| LLVM | ORC JIT, MCJIT | 
π» ΠΡΠΈΠΌΠ΅Ρ (Java HotSpot)
public class Main {
  public static void main(String[] args) {
    for (int i = 0; i < 1_000_000; i++) {
      Math.sqrt(i); // JIT ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ ΡΡΡ ΡΠ°ΡΡΡ ΠΏΠΎΡΠ»Π΅ Π°Π½Π°Π»ΠΈΠ·Π°
    }
  }
}β ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°
- 
ΠΠΎΠ²ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π·Π° ΡΡΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ Π² ΡΠ°Π½ΡΠ°ΠΉΠΌΠ΅
 - 
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π°Π΄Π°ΠΏΡΠ°ΡΠΈΠΈ ΠΏΠΎΠ΄ ΡΠ΅Π»Π΅Π²ΠΎΠ΅ CPU, Π½Π°Π³ΡΡΠ·ΠΊΡ ΠΈ ΠΏΡΠΎΡΠΈΠ»Ρ
 - 
ΠΠ΅Π½ΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΏΠΎΠ»Π½ΠΎΠΉ AOT ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠ΅ΠΉ
 - 
ΠΠ΅Π³ΠΊΠΎ Π²ΡΡΡΠ°ΠΈΠ²Π°Π΅ΡΡΡ Π² VM-Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ
 
β ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ
- 
Π£Π²Π΅Π»ΠΈΡΠ΅Π½Π½ΠΎΠ΅ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ ΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π² ΡΠ°Π½ΡΠ°ΠΉΠΌΠ΅
 - 
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠΈ
 - 
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ GC ΠΏΠ°ΡΠ·Ρ ΠΈ Π½Π°Π³ΡΡΠ·ΠΊΠ° Π½Π° Code Cache
 - 
ΠΠ΅ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² real-time ΡΠΈΡΡΠ΅ΠΌΠ°Ρ