J
Java-разработчик
@iamjavadev17 подп.
33просмотров
30 января 2026 г.
Score: 36
🔄 OSR: Как JVM перекомпилирует код прямо во время выполнения JIT-компиляция — это не только «прогрев». JVM умеет переключаться с интерпретатора на скомпилированный код посреди выполнения метода! 🖥 Сценарий: У вас есть долгий цикл, который выполняется тысячи итераций. JVM не будет ждать следующего вызова метода — она перекомпилирует его прямо во время выполнения текущего вызова. ⚙️Как это работает: Интерпретатор исполняет метод ↓ Счётчик итераций цикла достигает порога (например, 10K) ↓ JVM останавливает выполнение метода ↓ Компилирует метод в нативный код (C1/C2) ↓ Продолжает выполнение со скомпилированной версии ↓ Сохранение состояния (регистры, стек) → самое сложное! 👩‍💻 Пример кода, где это важно: public void processData(List<Data> items) { // Долгий цикл for (Data item : items) { // 100_000 элементов transform(item); // OSR сработает здесь! } } 🔍 Наблюдаем в логах: -XX:+PrintCompilation # Вывод будет содержать '%' для OSR-компиляции # 324 34 % 3 com.example.Foo::processData @ 5 (63 bytes) ⚠️Почему это важно знать? ✈️ 1. Бенчмаркинг: Первые несколько итераций цикла могут быть медленными ✈️ 2. Профилирование: Стектрейсы могут показывать странные метки ✈️3. Оптимизации: JVM может по-разному оптимизировать OSR vs обычную компиляцию 📌 *Итог: OSR — одна из самых сложных частей JVM, которая позволяет Java работать быстро даже в долгих циклах без явного «прогрева». ✈️Подписаться: @iamjavadev #jit #osr #производительность #сакральныезнания
33
просмотров
1512
символов
Нет
эмодзи
Нет
медиа

Другие посты @iamjavadev

Все посты канала →
🔄 OSR: Как JVM перекомпилирует код прямо во время выполнени — @iamjavadev | PostSniper