Что такое байт-код в контексте JVM?

Ответ

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

Как это работает:

  1. Пишется исходный код: Main.java.
  2. Компилятор javac транслирует его в байт-код: Main.class.
  3. JVM (например, HotSpot) загружает, проверяет, интерпретирует или компилирует (JIT) этот байт-код в машинный код для конкретного процессора.

Просмотр байт-кода:

javap -c Main.class

Пример вывода (упрощенно):

public static void main(java.lang.String[]);
  Code:
     0: getstatic     #2  // Field java/lang/System.out:Ljava/io/PrintStream;
     3: ldc           #3  // String Hello, World!
     5: invokevirtual #4  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
     8: return

Преимущества:

  • Кроссплатформенность (WORA): один .class файл работает везде, где есть JVM.
  • Безопасность: JVM проверяет байт-код перед выполнением (верификация).
  • Оптимизация: JIT-компилятор может оптимизировать "горячий" код во время выполнения.

Недостаток:

  • Накладные расходы: необходимость интерпретации/JIT-компиляции, что может влиять на время старта и потребление памяти.