πŸ“Œ Just-In-Time Compilation JIT

Just-In-Time Compilation JIT β€” ΠΌΠ΅Ρ‚ΠΎΠ΄ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΠ΄ компилируСтся Π²ΠΎ врСмя исполнСния, Π° Π½Π΅ Π·Π°Ρ€Π°Π½Π΅Π΅. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… языков.

🧠 Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

JIT ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΡŽ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ:

  1. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ β†’ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Java Bytecode, .NET IL)
  2. Π’ΠΎ врСмя выполнСния Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ анализируСтся ΠΈ компилируСтся Π² Machine Code
  3. ГорячиС участки (hot paths) ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ агрСссивно
  4. ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΊΡΡˆΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ

Π­Ρ‚Π°ΠΏΡ‹ JIT-ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π°:

Π’ΠΈΠ΄Ρ‹ JIT:

  • Baseline JIT β€” быстрая компиляция Π±Π΅Π· ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ
  • Optimizing JIT β€” ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Π½ΠΎ с ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΌΠΈ оптимизациями
  • Tiered JIT β€” Π³ΠΈΠ±Ρ€ΠΈΠ΄: сначала baseline, Π·Π°Ρ‚Π΅ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ
  • AOT + JIT β€” Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° компилируСтся Π·Π°Ρ€Π°Π½Π΅Π΅, ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ β€” Π²ΠΎ врСмя выполнСния

βš™οΈ Π“Π΄Π΅ примСняСтся

Π‘Ρ€Π΅Π΄Π° исполнСнияJIT-компилятор
Java (JVM)HotSpot JIT, Graal, C2
.NET (CLR)RyuJIT, Mono
JavaScript EngineV8 (Chrome), SpiderMonkey (Firefox)
PythonPyPy (JIT-рСализация)
LLVMORC 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 систСмаΡ