Является ли Java составленным или интерпретированным языком программирования?

В прошлом я использовал С++ в качестве языка программирования. Я знаю, что код, написанный на С++, проходит процесс компиляции, пока не станет объектным кодом "машинный код".

Я хотел бы знать, как работает Java в этом отношении. Как пользователь записывает Java-код на компьютер?

Ответ 1

В реализациях Java обычно используется двухэтапный процесс компиляции. Исходный код Java скомпилирован с помощью байт-кода с помощью компилятора Java. Байт-код выполняется виртуальной машиной Java (JVM). Современные JVM используют метод компиляцию Just-in-Time (JIT) для компиляции байт-кода в собственные инструкции, понятные аппаратным процессором "на лету" во время выполнения.

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

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

Подводя итог, в зависимости от среды исполнения байт-код может быть:

  • скомпилирован заранее и выполнен как родной код (похожий на большинство компиляторов С++)
  • скомпилировано как раз вовремя и выполнено
  • интерпретируется
  • напрямую выполняется поддерживаемым процессором (байт-код - это собственный набор команд некоторых процессоров)

Ответ 2

Термины "интерпретируемый язык" или "скомпилированный язык" не имеют смысла, поскольку любой язык программирования может быть интерпретирован и/или скомпилирован.

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

В наши дни частичная компиляция "точно в срок" используется для многих языков, которые когда-то считались "интерпретированными", например Javascript.

Ответ 3

enter image description here

Код, написанный на Java:

  • Сначала скомпилированный в байт-код программой javac, как показано в левой части изображения выше;
  • Затем, как показано в правом разделе приведенного выше изображения, другая программа, называемая java, запускает среду выполнения Java и может компилировать и/или интерпретировать байт-код с помощью Java Interpreter/JIT Compiler.

Когда Java интерпретирует байт-код и когда он его компилирует? Код приложения первоначально интерпретируется, но JVM отслеживает, какие последовательности байт-кода часто выполняются, и транслирует их в машинный код для непосредственного выполнения на оборудовании. Для байт-кода, который выполняется только несколько раз, это экономит время компиляции и уменьшает начальную задержку; для часто выполняемого байт-кода JIT-компиляция используется для запуска на высокой скорости после начальной фазы медленной интерпретации. Кроме того, поскольку программа тратит большую часть времени на выполнение меньшего количества своего кода, сокращение времени компиляции является значительным. Наконец, во время первоначальной интерпретации кода, статистика выполнения может быть собрана до компиляции, что помогает выполнять лучшую оптимизацию.


Рекомендации:

1: http://techwelkin.com/compiler-vs-interpreter

2: http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html

3: https://en.wikipedia.org/wiki/Just-in-time_compilation#Startup_delay_and_optimizations

Ответ 4

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

Ответ 5

Виды обоих. Сначала компилируется java (некоторые предпочитают говорить "переводится" ) на байт-код, который затем либо скомпилирован, либо интерпретируется в зависимости от настроения JIT.

Ответ 6

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

Ответ 7

Java выполняет как компиляцию, так и интерпретацию,

В Java программы не компилируются в исполняемые файлы; они скомпилированы в байт-код (как обсуждалось ранее), который JVM (виртуальная машина Java) затем интерпретирует/выполняет во время выполнения. Исходный код Java компилируется в байт-код, когда мы используем компилятор javac. Байт-код сохраняется на диске с расширением.class.

Когда программа должна быть запущена, байт-код преобразуется, байт-код может быть преобразован с использованием компилятора JIT. Результатом является машинный код, который затем подается в память и выполняется.

Javac - это компилятор Java, который компилирует код Java в байт-код. JVM - это виртуальная машина Java, которая выполняет/интерпретирует/переводит байт-код в машинный код. В Java, хотя он считается интерпретируемым языком, он может использовать JIT (Just-in-Time) компиляцию, когда байт-код находится в JVM. JIT-компилятор считывает байт-коды во многих разделах (или полностью, редко) и динамически компилирует их в машинный код, чтобы программа могла работать быстрее, а затем кэшироваться и повторно использоваться позже без необходимости перекомпиляции. Таким образом, JIT-компиляция сочетает в себе скорость скомпилированного кода с гибкостью интерпретации.

Интерпретируемый язык - это тип языка программирования, для которого большинство его реализаций выполняют инструкции напрямую и свободно, без предварительной компиляции программы в инструкции машинного языка. Интерпретатор выполняет программу напрямую, переводя каждый оператор в последовательность из одной или нескольких подпрограмм, уже скомпилированных в машинный код.

Скомпилированный язык - это язык программирования, реализации которого, как правило, являются компиляторами (переводчиками, которые генерируют машинный код из исходного кода), а не интерпретаторами (пошаговые исполнители исходного кода, где не выполняется перевод перед выполнением)

В современных реализациях языка программирования, таких как в Java, для платформы все более популярно предоставлять обе опции.

Ответ 8

Java - это байт-скомпилированный язык, ориентированный на платформу, называемую Java Virtual Machine, которая основана на стеках и имеет некоторые очень быстрые реализации на многие платформы.

Ответ 9

Цитата из: https://blogs.oracle.com/ask-arun/entry/run_your_java_applications_faster

Разработчики приложений могут разрабатывать код приложения на любой из различных ОС, доступных на рынке сегодня. Язык Java на данном этапе является агностическим для ОС. Блестящий исходный код, написанный разработчиком Java-приложений, теперь компилируется в Java-байт-код, который в терминологии Java называется компиляцией на стороне клиента. Эта компиляция в Java-байт-код позволяет разработчикам Java писать один раз. Java-байт-код может запускаться на любой совместимой ОС и сервере, что делает агностик исходного кода OS/Server. После создания Java-байт-кода взаимодействие между приложением Java и базовой ОС/Сервером более интимное. Путешествие продолжается. Рамка корпоративных приложений выполняет эти байт-коды Java в среде времени выполнения, которая известна как Java Virtual Machine (JVM) или Java Runtime Environment (JRE). JVM тесно связан с базовыми ОС и оборудованием, поскольку он использует ресурсы, предлагаемые ОС и сервером. Байт Java-кода теперь скомпилирован на исполняемый код машинного языка, который является специфичным для платформы. Это называется компиляцией на стороне сервера.

Итак, я бы сказал, что Java определенно скомпилированный язык.