Подтвердить что ты не робот

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

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

В чем преимущество этого (компилируется и интерпретируется)?

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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

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

Ответ 6

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

Интерпретировано: выполните на разных платформах одинаковый (байтовый) код.

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

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

Ответ 7

Java - это полноценный объектно-ориентированный язык программирования. Это платформа независимый и обычно интерпретируется, а не компилируется, как C/С++. Java использует независимый байт-код, который является нейтральным по архитектуре. То есть он предназначен для независимой от машины. Байт-коды интерпретируются и выполняются виртуальной машиной Java (JVM).