Короткий ответ
Байт-код — это промежуточное представление Java-программы: набор инструкций не для конкретного процессора, а для абстрактной вычислительной машины — JVM. Компилятор javac превращает исходный файл Hello.java в файл Hello.class, внутри которого и находится байт-код.
Как это работает подробнее
Байт-код компактнее исходного текста и уже содержит результат синтаксического и семантического анализа, но машинным кодом ещё не является — его исполняет JVM.
- Интерпретация и JIT. JVM либо интерпретирует байт-код, либо компилирует часто исполняемые участки в машинный код с помощью JIT-компилятора (Just-In-Time), что ускоряет выполнение.
- Связующее звено. Программу компилируют в байт-код один раз, а дальше каждая реализация JVM сама решает, как исполнить его на своей платформе.
Пример кода
Компиляция и просмотр байт-кода
javac Hello.java
# появляется Hello.class, внутри которого байт-код
java Hello
# дизассемблер javap показывает инструкции байт-кода
javap -c HelloЧто использовать на практике
- Помнить, что результатом
javacвсегда является.class-файл с байт-кодом. - Использовать
javap -c, чтобы посмотреть реальные инструкции байт-кода. - Рассматривать байт-код как единицу переносимости: он не зависит от ОС и процессора.
Подводные камни
- Считать байт-код машинным кодом: напрямую процессор его не исполняет.
- Путать исходный текст и содержимое class-файла: внутри лежат инструкции для JVM, а не ваш Java-код.