В прошлом я использовал C ++ в качестве языка программирования. Я знаю, что код, написанный на C ++, проходит процесс компиляции, пока не станет объектным кодом «машинный код».
Я хотел бы знать, как Java работает в этом отношении. Как пользовательский Java-код запускается компьютером?
java
compilation
interpretation
отображаемое имя
источник
источник
Ответы:
Реализации Java обычно используют двухэтапный процесс компиляции. Исходный код Java компилируется в байт-код компилятором Java. Байт-код выполняется виртуальной машиной Java (JVM). Современные JVM используют метод компиляции Just-in-Time (JIT) для компиляции байт-кода с нативными инструкциями, понятными аппаратному ЦП на лету во время выполнения.
Некоторые реализации JVM могут интерпретировать байт-код вместо JIT, компилируя его в машинный код и выполняя его напрямую. Хотя это все еще считается «интерпретатором», он довольно сильно отличается от интерпретаторов, которые читают и выполняют исходный код высокого уровня (то есть в этом случае исходный код Java не интерпретируется напрямую, это байт-код, вывод компилятора Java).
Технически возможно заблаговременно скомпилировать Java в нативный код и запустить полученный бинарный файл. Также возможно интерпретировать код Java напрямую.
Подводя итог, в зависимости от среды выполнения, байт-код может быть:
источник
Код, написанный на Java:
Когда Java интерпретирует байт-код и когда он его компилирует? Код приложения первоначально интерпретируется, но JVM отслеживает, какие последовательности байт-кода часто выполняются, и транслирует их в машинный код для непосредственного выполнения на оборудовании. Для байт-кода, который выполняется только несколько раз, это экономит время компиляции и уменьшает начальную задержку; для часто выполняемого байт-кода JIT-компиляция используется для запуска на высокой скорости после начальной фазы медленной интерпретации. Кроме того, поскольку программа тратит большую часть времени на выполнение меньшего количества кода, сокращение времени компиляции является значительным. Наконец, во время первоначальной интерпретации кода, статистика выполнения может быть собрана до компиляции, что помогает выполнять лучшую оптимизацию.
источник
Термины «интерпретируемый язык» или «скомпилированный язык» не имеют смысла, потому что любой язык программирования может интерпретироваться и / или компилироваться.
Что касается существующих реализаций Java, большинство из них включают в себя этап компиляции для байт-кода , поэтому они включают компиляцию. Среда выполнения также может динамически загружать байт-код, поэтому всегда требуется некоторая форма интерпретатора байт-кода. Этот интерпретатор может, а может и не использовать компиляцию для собственного кода внутри страны.
В настоящее время частичная компиляция точно в срок используется для многих языков, которые когда-то считались «интерпретированными», например JavaScript.
источник
Java компилируется в байт-код, который затем переходит в Java VM, которая его интерпретирует.
источник
Java - это скомпилированный язык программирования, но вместо компиляции непосредственно в исполняемый машинный код он компилируется в промежуточную двоичную форму, называемую байтовым кодом JVM. Затем байт-код компилируется и / или интерпретируется для запуска программы.
источник
Вид обоих. Сначала компилируется Java (некоторые предпочитают говорить «переведенный») в байт-код, который затем либо компилируется, либо интерпретируется в зависимости от настроения JIT.
источник
Java выполняет как компиляцию, так и интерпретацию,
В Java программы не компилируются в исполняемые файлы ; они компилируются в байт-код (как обсуждалось ранее), который JVM (виртуальная машина Java) затем интерпретирует / выполняет во время выполнения. Исходный код Java компилируется в байт-код, когда мы используем компилятор javac. Байт-код сохраняется на диске с расширением .class .
Когда программа должна быть запущена,
байт-код преобразуется,байт-код может быть преобразован с использованием компилятора JIT. В результате получается машинный код, который затем подается в память и выполняется.Javac - это компилятор Java который компилирует код Java в байт-код. JVM - это виртуальная машина Java, которая выполняет / интерпретирует / переводит байт-код в машинный код. В Java, хотя он считается интерпретируемым языком, он может использовать компиляцию JIT (Just-in-Time), когда байт-код находится в JVM. JIT-компилятор считывает байт-коды во многих разделах (или полностью, редко) и динамически компилирует их в машинный код, чтобы программа могла работать быстрее, а затем кэшироваться и повторно использоваться позже без необходимости перекомпиляции. Таким образом, JIT-компиляция сочетает в себе скорость скомпилированного кода с гибкостью интерпретации.
Интерпретируемый язык является типом языка программирования , для которого большинство его реализаций выполнения инструкций непосредственно и свободно, без предварительной компиляции программы в инструкцию машинного языка. Интерпретатор выполняет программу напрямую, переводя каждый оператор в последовательность из одной или нескольких подпрограмм, уже скомпилированных в машинный код.
Компилируемый язык является языком программирования , чьи реализации , как правило , составители (переводчики , которые генерируют машинный код из исходного кода), а не переводчики (шаг за шагом исполнителями исходного кода, где нет предварительного выполнения перевода не происходит)
В современных реализациях на языке программирования, таких как в Java, для платформы все более популярно предоставлять обе опции.
источник
Java - это язык, скомпилированный байтами, предназначенный для платформы, называемой виртуальной машиной Java, которая основана на стеке и имеет некоторые очень быстрые реализации на многих платформах.
источник
Цитата из: https://blogs.oracle.com/ask-arun/entry/run_your_java_applications_faster
Поэтому я бы сказал, что Java определенно является компилируемым языком.
источник