29просмотров
19 января 2026 г.
Score: 32
☄️ JIT-компиляция: почему первые 10 000 вызовов метода — самые медленные Знаете ли вы, что Java компилирует ваш код дважды? Сначала в байт-код, а потом — в нативный код прямо во время выполнения! 🔼 Уровни компиляции C1/C2: 1. Интерпретатор — первые 1-2K вызовов, медленно
2. C1 (клиентский компилятор) — быстрая компиляция, средняя оптимизация
3. C2 (серверный компилятор) — медленная компиляция, агрессивные оптимизации ❓ Что делает C2 таким умным: ✈️ Inlining — подставляет тело мелких методов
✈️ Escape Analysis — выделяет объекты на стеке
✈️ Loop Unrolling — разворачивает циклы
✈️ Dead Code Elimination — удаляет неиспользуемый код 🤓 Практический пример: // До оптимизации
public int calculate() { int sum = 0; for (int i = 0; i < 1000; i++) { sum += i * 2; } return sum;
} // После JIT (условно):
public int calculate() { return 999000; // Всё посчитано на этапе компиляции!
}
📈 Как мониторить: -XX:+PrintCompilation # Что компилируется
-XX:+PrintInlining # Какие методы подвергаются inlining
-XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly # Сгенерированный ассемблер
⚠️ Важно для production: Дайте JVM «прогреться» (warm-up) перед нагрузкой! Бенчмарки без warm-up бессмысленны. 📌 Итог: Java — не «медленный» язык. После прогрева он сравнивается с C++ по скорости. Понимание JIT помогает писать JIT-дружественный код. ✈️Подписаться: @iamjavadev #jit #производительность #компиляция #сакральныезнания