Ответ 1
Компиляция один раз и запуск в любом месте является одной из причин.
JVM является специфичным для ОС. Таким образом, JVM интерпретирует скомпилированный файл .class(байтовый код) и преобразует его в машинный набор команд.
Возможный дубликат:
Является ли Java скомпилированным или интерпретируемым языком программирования?
Почему Java компилируется и интерпретируется языком?
Сначала мы скомпилируем java-программу с помощью javac (компиляция) и запустите программу, используя java (интерпретацию). В чем преимущество этого?
Также, где роль JIT входит в картину?
Компиляция один раз и запуск в любом месте является одной из причин.
JVM является специфичным для ОС. Таким образом, JVM интерпретирует скомпилированный файл .class(байтовый код) и преобразует его в машинный набор команд.
Компилятор Java обычно компилирует исходный код на промежуточный язык, выраженный в общем виде как "байтовый код". Это само по себе не машинный код для вашего собственного оборудования, но в некотором смысле это "машинный" код для виртуальной машины Java.
Преимущество этого разделения состоит в том, что (теоретически) вы можете реализовать виртуальную машину на разных платформах, но все они смогут запускать один и тот же скомпилированный байт-код Java.
Компилятор "точно в срок" является частью гипотетической виртуальной машины и фактически переводит биты байтового кода динамически в реальный, собственный машинный код по мере необходимости. Это объясняется тем, что запуск Java-программы исключительно в виртуальной машине был намного медленнее, чем эквивалентный собственный код. Компиляция JIT сделала Java VM конкурентоспособной с точки зрения производительности по сравнению с изначально скомпилированным кодом.
Вот статья, в которой содержится более подробная информация о Java JIT: