Почему java компилируется и интерпретируется

Возможный дубликат:
Является ли Java скомпилированным или интерпретируемым языком программирования?

Почему Java компилируется и интерпретируется языком?

Сначала мы скомпилируем java-программу с помощью javac (компиляция) и запустите программу, используя java (интерпретацию). В чем преимущество этого?

Также, где роль JIT входит в картину?

Ответ 1

Компиляция один раз и запуск в любом месте является одной из причин.

JVM является специфичным для ОС. Таким образом, JVM интерпретирует скомпилированный файл .class(байтовый код) и преобразует его в машинный набор команд.

Ответ 2

Компилятор Java обычно компилирует исходный код на промежуточный язык, выраженный в общем виде как "байтовый код". Это само по себе не машинный код для вашего собственного оборудования, но в некотором смысле это "машинный" код для виртуальной машины Java.

Преимущество этого разделения состоит в том, что (теоретически) вы можете реализовать виртуальную машину на разных платформах, но все они смогут запускать один и тот же скомпилированный байт-код Java.

Компилятор "точно в срок" является частью гипотетической виртуальной машины и фактически переводит биты байтового кода динамически в реальный, собственный машинный код по мере необходимости. Это объясняется тем, что запуск Java-программы исключительно в виртуальной машине был намного медленнее, чем эквивалентный собственный код. Компиляция JIT сделала Java VM конкурентоспособной с точки зрения производительности по сравнению с изначально скомпилированным кодом.

Ответ 3

  • Java "скомпилирована" в байтовый код
  • Байт-код "интерпретируется" по мере выполнения программой
  • Компилятор JIT и "прекомпилирует" байтовый код в собственный машинный код, оптимизируя время выполнения

Вот статья, в которой содержится более подробная информация о Java JIT: