Байт-код рассматривается как набор инструкций для JVM?

Я читал о instruction set в wiki, и я наткнулся на этот абзац:

Некоторые виртуальные машины, поддерживающие байт-код как их ISA, такие как Smalltalk, виртуальная машина Java и общий язык Microsoft Runtime, реализовать это, переведя байт-код для часто используемых кода в собственный машинный код. Кроме того, эти виртуальные машины выполняют менее часто используемые кодовые пути путем интерпретации (см. компиляцию "точно вовремя" ). Transmeta реализовала x86 таким образом, наборы команд на процессорах VLIW.

Что это означает?     - bytecodes - ISA для JVM и JVM для поддержки процессоров ISA.

Ответ 1

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

enter image description here

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

Ответ 2

- это байт-коды ISA для JVM

Байт-код - это инструкции JVMs.

и JVM в свою очередь поддерживают ISA процессоров.

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

Ответ 3

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

Что это означает? это байт-коды ISA для JVM и JVM в свою очередь, поддерживает ISA процессоров.

ISA (архитектура набора инструкций) определяет весь набор дисциплин и методов, которые применяются к написанию низкоуровневого программного обеспечения, которое выполняется непосредственно на CPU. Он включает в себя набор кодов операций, которые представляют собой несвязанные прямые команды ЦП. JVM распознает собственный набор байт-кодов (т.е. 8-битные коды операций), которые направляют JVM для выполнения инструкций-примитивов-интерпретаторов. Итак, да, спецификация байт-кода составляет часть JVM ISA.

JVM выполняет итерацию через список кодов операций, выполняющих их один за другим, используя собственную память эмулировать аппаратные компоненты (например, стек, регистр, основную память) и использовать примитивные арифметические и логические операции для эмуляции ALU. Эти эмулируемые компоненты также составляют JVM ISA. Это основная конструкция любого переводчика, дайте или возьмите. Однако для улучшения времени выполнения Java-приложений JVM собирает "горячие точки" для машинного кода для оптимальной производительности. Горячие точки - это разделы кода, которые часто выполняются. Это называется компиляцией "Just-In-Time" и может выполняться во время выполнения программы. Этот метод приносит производительность Java намного ближе к производительности скомпилированных языков. JIT также используется в платформе .NET.

Каждая операционная система имеет собственную реализацию JVM, которая также может варьироваться в зависимости от устройства ISA. Например, у вас может быть JVM, написанная для Linux-Arm, Linux-x86 или Windows-x86. Сам JVM может быть написан на независимом от платформы (как бы в любом случае) языке, таком как C, но его компилятор JIT должен поддерживать компиляцию в наборе инструкций устройства.