Найти в Дзене
learn Java

Спорим ты не знал как java работает под "капотом"?

Изначально исходный код находится в файлах .java Чтобы программа работала, его надо скомпилировать в формат, который понимает компьютер, этапы: 1. Компиляция в байт-код 2. Выполнение байт-кода 3. JIT-компиляция для ускорения выполнения Байт-код это промежуточный код, который создается после компиляции java кода. Он не выполняется напрямую процессором, вместо этого он исполняется с помощью JVM, которая преобразует его в машинный код. Байт-код универсален, его можно исполнять в любой среде, где установлена JVM JVM - виртуальная машина, которая выполняет код java. Основа независимости от платформы. Она выполняет байт-код и преобразует его в машинный. Этапы выполнения байт-кода на JVM: При интерпретации в JVM байт-код действительно выполняется "на лету", и каждый раз, когда интерпретатор встречает один и тот же участок кода, он повторно преобразует его в машинные команды. JIT-компиляция - это метод, используемый JVM, для повышения производительности. Он преобразует байт-код в машинный у ча
Оглавление

Сегодня разберем тему, как понятный нам java код, становиться понятным компьютеру машинным кодом

Выполнение Java кода:

Изначально исходный код находится в файлах .java

Чтобы программа работала, его надо скомпилировать в формат, который понимает компьютер, этапы:

1. Компиляция в байт-код

2. Выполнение байт-кода

3. JIT-компиляция для ускорения выполнения

Компиляция в байт-код

Байт-код это промежуточный код, который создается после компиляции java кода. Он не выполняется напрямую процессором, вместо этого он исполняется с помощью JVM, которая преобразует его в машинный код.

  1. javac (Java Compiler) переводит исходный код в байт-код
  2. Компилятор анализирует код на наличие синтаксических ошибок
  3. Создается файл .class содержащий байт-код

Байт-код универсален, его можно исполнять в любой среде, где установлена JVM

Выполнение байт-код на JVM

JVM - виртуальная машина, которая выполняет код java. Основа независимости от платформы. Она выполняет байт-код и преобразует его в машинный.

Этапы выполнения байт-кода на JVM:

  1. Загрузка классов: JVM загружает файлы с байт-кодом (.class) в память
  2. Проверка: JVM выполняет верификацию байт-кода, на безопасность
  3. Подготовка и инициализация: JVM выделяет память для данных и переменных, инициализирует их и подготавливает к исполнению
  4. Интерпретация и JIT-компиляция: JVM либо интерпретирует байт-код, либо компилирует его в машинный с помощью JIT-компилятора

При интерпретации в JVM байт-код действительно выполняется "на лету", и каждый раз, когда интерпретатор встречает один и тот же участок кода, он повторно преобразует его в машинные команды.

JIT-компиляция (Just-In-Time компиляция)

JIT-компиляция - это метод, используемый JVM, для повышения производительности. Он преобразует байт-код в машинный у часто вызываемых методов, во время выполнения программы.

Этапы работы JIT-компилятора:

  1. Анализ частоты выполнения кода: JIT анализирует, какие методы и части коды выполняются чаще всего
  2. Компиляция частого кода: JIT компилирует байт-код в машинный у обнаруженный часто вызываемых методов
  3. Оптимизация кода: JIT применяет оптимизацию, [[инлайн-функции]], чтобы ускорить выполнение
  4. Исполнение: Полученный машинный код исполняется напрямую процессором

Если JIT-компилятор распознает код как "горячий" (часто выполняемый) и скомпилирует его в машинный код, дальнейшие вызовы уже не будут интерпретироваться, а будут исполнятся напрямую.