Генерирует ли JVM байт-код или запускает байт-код?



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

156   7  

7 ответов:

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

Из oracle docs:

Программа должна быть преобразована в форму, понятную виртуальной машине Java, так что любой компьютер с виртуальной машиной Java может интерпретировать и запускать программу. Компиляция Java-программы означает принятие читаемого программистом текста в ваш программный файл (также называемый исходным кодом) и преобразование его в байт-коды, которые не зависят от платформы инструкции для Java ВИРТУАЛЬНАЯ ПАМЯТЬ.

Когда вы говорите javac file, компилятор Java (называемый javac) преобразует ваш код в промежуточную форму (байт-код). Он не преобразует его непосредственно в машинный язык, который является специфичным для платформы, так что вы можете дать файлы класса (байт-код) любому пользователю на любой платформе. Именно так работает принцип "пиши один раз, беги куда угодно". Вместо компиляции в машинный язык платформы, он компилируется в общий байт-код.

Когда вы говорите java file, JVM возьмет байт-код и преобразует его в родной машинный язык кусками "на лету" (во время выполнения) и выполнять их. Он делает это с помощью JIT-компилятора (который может быть источником путаницы, так как это не то же самое, что javac). Кстати, JDK-это не то же самое, что javac. JDK-это SDK (software development kit), который содержит все, что есть в Java, включая JVM и javac.

  1. JVM = JIT компилятор + интерпретатор Java + сборщик мусора
  2. JRE = JVM + библиотечные классы
  3. JDK = JRE + инструмент разработки

Sun JVM написан на C, а Oracle JVM написан на C++

Компилятор Java javac преобразует исходный код в байт-код. JIT-компилятор и интерпретатор Java внутри JVM преобразуют байт-код в соответствующий машинный код.

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

В нашей системе оба javac.exe (для компиляции исходного кода java, например: javac HelloWorld.java) и java.exe (для выполнения байт-кода java с помощью JVM, например: java HelloWorld) вызываются, которые доступны в .только форматы exe (javac.exe и java.исполняемый). Таким образом, компилятор Java javac и JVM не были написаны на Java.Если они были написаны на Java тогда те, возможно, были доступны в то javac.класс и java.формат класса.

Javac поставляется под JDK, а не под JVM.Помните, что JVM работает только во время выполнения, то есть после компиляции исходного кода в байт-код..но перед этим javac компилирует исходный код в байт-код. JVM преобразует байт-код в соответствующий машинный код с помощью JIT-компилятора и интерпретатора Java.

Для различных операционных систем различные программные обеспечения JDK и JRE доступны корпорацией Oracle; так как JVM(входящий в JRE), так и компилятор javac(входящий в JDK) являются платформами Dependent.So подтверждено, что компилятор javac и JVM не написаны на Java.Потому что язык Java всегда независим от платформы.

JVM запускает байт-код, Java-компилятор генерирует его.

Однако приложения могутгенерировать байт-код во время выполнения, но сгенерированный байт-код снова выполняется JVM.

JVM , в зависимости от платформы, преобразует байтовый код в m/c код. Точнее, JIT (just-in-time) компилятор внутри JVM делает это. Байтовый код генерируется javac.exe. И Ява.exe преобразует этот байт-код в m/c-код с помощью jvm.dll (в windows).

JDK (javac) генерирует байтовый код(.файл класса). Теперь этот байтовый код может быть запущен на любой платформе JVM этой платформы.

Короче говоря виртуальная машина Java выполняет / интерпретирует / переводит байт-код в собственный машинный код. Он не генерирует байт-код.И мы можем рассматривать JVM как интерпретатор.

Ниже поможет понять вышесказанное,

Байт-код , также называемый переносным кодом или p-кодом, представляет собой форму набора команд, предназначенную для эффективного выполнения интерпретатором программного обеспечения. Это нечто среднее между читаемым человеком исходным кодом и машиночитаемым машинным кодом. Один байт-код программы может быть выполнен путем разбора и непосредственного выполнения инструкций, по одной за раз. Этот вид интерпретатора байт-кода очень портативен. Некоторые системы, называемые динамическими трансляторами или JIT-компиляторами, переводят байт-код в машинный код по мере необходимости во время выполнения. Это делает виртуальную машину аппаратно-специфичной, но не теряет переносимости байт-кода. Обратитесь это.

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

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

    Ничего не найдено.

Добавить ответ:
Отменить.