Введение в Java · Урок 5/5
100%
⏱ 5 минут чтения Обновлено: 2026-06-26

Транслятор, компилятор, интерпретатор и байт-код

В этой статье разберём ключевые понятия, которые объясняют, как код программы превращается в работающее приложение: транслятор, компилятор, интерпретатор и байт-код. Начнём с транслятора.

Транслятор

Транслятор — это программа, которая переводит код, написанный на одном языке, в код на другом языке. Чаще всего исходный код на языке программирования транслируется в машинный код, понятный процессору. Трансляторы условно делятся на два вида: компиляторы и интерпретаторы.

Компилятор

Компилятор берёт исходный код целиком, проверяет его на ошибки и, если их нет, полностью преобразует в машинный код. Получившуюся программу затем выполняет процессор. Благодаря этому выполнение происходит быстро, и компилятор не нужен на компьютере пользователя. Но есть и обратная сторона: программа становится привязанной к конкретной операционной системе и архитектуре процессора, а любое изменение кода требует повторной компиляции.

Схема работы компилятора:

Схема работы компилятора: исходный код преобразуется в машинный код

Достоинства:

  • высокая скорость выполнения программы;
  • компилятор не нужен на компьютере пользователя.

Недостатки:

  • программа зависит от ОС и процессора, под которые скомпилирована;
  • при изменении кода требуется перекомпиляция.

Интерпретатор

Интерпретатор читает исходный код и выполняет его построчно, по мере чтения. Такой подход даёт гибкость: код не привязан к конкретной операционной системе и легко переносится между платформами, а при изменениях не нужна перекомпиляция. Плата за эту гибкость — обычно более низкая скорость выполнения, поскольку код разбирается заново при каждом запуске.

Схема работы интерпретатора:

Схема работы интерпретатора: исходный код выполняется построчно

Достоинства:

  • независимость от операционной системы;
  • при изменении кода не требуется перекомпиляция.

Недостатки:

  • более низкая скорость выполнения;
  • для запуска программы нужен интерпретатор.

Байт-код

Java использует третий подход, объединяющий достоинства компилятора и интерпретатора, — байт-код.

Как работает Java: исходный код компилируется в байт-код, который выполняет JVM

Процесс начинается с исходного кода на Java в файле с расширением .java. Этот код проходит через компилятор (javac), который проверяет его на ошибки и преобразует не в машинный код конкретного процессора, а в байт-код — промежуточное платформонезависимое представление. При этом создаётся файл с расширением .class.

Байт-код не привязан к конкретной платформе: его может выполнить любое устройство, на котором установлена виртуальная машина Java (JVM). Именно JVM запускает байт-код на конкретной системе.

При этом современная JVM не просто интерпретирует байт-код. Она сочетает интерпретацию с JIT-компиляцией (Just-In-Time): наиболее часто выполняемые («горячие») участки байт-кода компилируются в нативный машинный код прямо во время работы программы. Благодаря этому Java получает и переносимость байт-кода, и скорость, близкую к скомпилированным языкам.

Важно

Из-за байт-кода Java часто называют «интерпретируемым языком», но это неточно. Современная JVM (например, HotSpot) сочетает интерпретацию с JIT-компиляцией в нативный код, а в ряде сценариев применяется и опережающая AOT-компиляция (GraalVM).

Сравнение подходов

Подход Как обрабатывает код Скорость Переносимость
Компилятор Преобразует весь код в машинный код заранее Высокая Привязан к ОС и процессору
Интерпретатор Выполняет код построчно во время работы Низкая Не зависит от ОС
Байт-код (Java) Компилируется в .class, затем JVM интерпретирует и JIT-компилирует Высокая (за счёт JIT) Выполняется на любой JVM

Часто задаваемые вопросы

Чем отличается компилятор от интерпретатора?

Компилятор преобразует весь исходный код целиком в машинный код до выполнения, а интерпретатор читает и выполняет код построчно во время работы. Компиляция даёт скорость, интерпретация — гибкость и независимость от платформы.

Что такое байт-код в Java?

Байт-код — это промежуточное платформонезависимое представление программы, которое создаёт компилятор javac из .java-файла. Он хранится в файлах .class и выполняется виртуальной машиной Java (JVM).

Java — компилируемый или интерпретируемый язык?

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

Что такое JIT-компиляция?

JIT (Just-In-Time) — это компиляция «горячих» участков байт-кода в нативный машинный код прямо во время выполнения программы. Благодаря ей Java сочетает переносимость байт-кода с высокой производительностью.

Зачем Java использует байт-код, а не машинный код напрямую?

Чтобы обеспечить переносимость: один и тот же байт-код выполняется на любой платформе с установленной JVM, без перекомпиляции под каждый процессор и операционную систему.

Видео объяснение

Предпочитаете видеоформат? Посмотрите этот урок с примерами и объяснениями.

Комментарии

Зарегистрируйтесь или войдите, чтобы иметь возможность оставить комментарий.

‹ Предыдущий урок Следующий урок ›