Компилятор/интерпретатор Java

Почему мы делаем мы говорим, что Java является скомпилированным и интерпретируемым языком?

Каково преимущество этого (быть скомпилированным и интерпретируемый)?

19
задан Matthias Braun 24 January 2018 в 13:29
поделиться

6 ответов

Java компилируется в промежуточный "байт-код" во время компиляции. Это отличается от языка типа C, который компилируется в машинный язык во время компиляции. Байт-код Java не может быть непосредственно исполнен на аппаратном обеспечении так, как это может сделать скомпилированный код на языке C. Вместо этого байт-код должен быть интерпретирован виртуальной машиной JVM (Java Virtual Machine) во время выполнения, чтобы быть исполненным. Основной недостаток такого языка, как C, заключается в том, что после компиляции двоичный файл будет работать только на одной конкретной архитектуре (например, x86).

Интерпретируемые языки, такие как PHP, фактически независимы от системы и полагаются на интерпретатор, специфичный для системы и архитектуры. Это приводит к гораздо большей переносимости (одни и те же PHP-скрипты работают на машинах Windows, Linux и т.д.). Однако такая интерпретация приводит к значительному снижению производительности. Языки высокого уровня, такие как PHP, требуют больше времени для интерпретации, чем машинные инструкции, которые могут быть выполнены аппаратным обеспечением.

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

Как отмечает Божо, существуют некоторые стратегии повышения производительности кода Java (и других языков байт-кода, таких как .Net) за счет использования компиляции Just in Time (JIT). Фактический процесс варьируется от реализации к реализации в зависимости от требований, но конечным результатом является то, что исходный код компилируется в байт-код во время компиляции, но затем он проходит через компилятор во время выполнения перед выполнением. Благодаря этому код может выполняться на скорости, близкой к нативной. Некоторые платформы (я полагаю, что .Net делает это) сохраняют результат JIT-компиляции, заменяя им байт-код. Таким образом, все последующие выполнения программы будут выполняться так, как будто программа была изначально скомпилирована.

46
ответ дан 30 November 2019 в 02:01
поделиться

Это длинная тема, и вам лучше прочитать о JIT . Короче говоря, Java компилируется в байт-код, а затем байт-код компилируется (в JVM) в машинный код.

6
ответ дан 30 November 2019 в 02:01
поделиться

Java считается "компилируемым" языком, поскольку код компилируется в формат байткода, который затем запускается виртуальной машиной Java (JVM). Это дает ряд преимуществ в области производительности и оптимизации кода, не говоря уже об обеспечении корректности кода.

Язык считается "интерпретируемым", поскольку после компиляции байткода он может быть запущен на любой машине, на которой установлена JVM. Таким образом, Java во многом похож на интерпретируемый язык, поскольку по большей части он не зависит от платформы, на которой выполняется. Это поведение схоже с другими интерпретируемыми языками, такими как Perl, Python, PHP и т.д.

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

3
ответ дан 30 November 2019 в 02:01
поделиться

Почему мы говорим, что Java - это компилируемый и интерпретируемый язык.

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

В чем преимущество перед этим (компиляция/интерпретация)

Переносимость. тот же байткод может быть выполнен на любой платформе при условии, что установлена JVM ("компилируй один раз, запускай везде").

13
ответ дан 30 November 2019 в 02:01
поделиться

Скомпилировано: Ваша программа синтаксически является правильной Java-программой до запуска программы.

Интерпретация: Запуск на разных платформах одного и того же (байт-)кода.

Скомпилировано: Когда ваша программа скомпилирована правильно, вы можете быть в состоянии контролировать 80% программных ошибок. И ваш код не остановится, потому что вы неправильно закрыли блок кода и т. д.

Интерпретируется: Вы знаете, что такое апплеты? Это было «убийственное» приложение, когда вышла Java. Ваш браузер загружает апплет с веб-сайта и запускает код апплета в вашем браузере. Это не очень круто. Но, тот же апплет работает на Windows, Linux, Mac, Solaris, ... потому что запускает/интерпретирует интермедиумный язык: байтовый код.

1
ответ дан 30 November 2019 в 02:01
поделиться

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

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

2
ответ дан 30 November 2019 в 02:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: