Промежуточный код по виртуальным машинам

371
pjj

Я читал о наборе инструкций и наткнулся на следующую строку из WIKI

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

Пожалуйста, исправьте мое общее понимание "набора инструкций" и управления виртуальными машинами:

  • В основном процессоры имеют загруженные в память инструкции или наборы команд, которые используются для обработки. Теперь процессоры получают двоичный ввод, который является ничем иным, как «двоичным» представлением этих команд. Правильно?
  • Набор инструкций также может называться «машинный код» или «машинный язык». Правильно?
  • JVM принимает байт-код Java и создает двоичную форму «набора команд», «машинного кода» или «машинного языка». Таким образом, я могу сказать, что байт-код является машинным языком JVM, потому что JVM понимает байт-код или принимает байт-код в качестве входных данных и создает двоичную форму «машинного кода» для операционной системы, а затем ОС будет дополнительно преобразовывать этот «машинный код» в «машинный код» для процессора . Правильно?
    • Часть, выделенная жирным шрифтом в моем вышеупомянутом вопросе, является одной из главных вещей, которые я хочу понять. Поскольку у нас нет JVM для конкретных процессоров, у нас есть JVM для конкретных ОС, поэтому я понимаю, что JVM не может генерировать «машинный код» для процессора и будет генерировать «машинный код» для ОС, а затем, наконец, ОС будет производить «машинный код», который должен быть выполнен процессором.

Пожалуйста, подтвердите мое понимание, и, если оно неверно, укажите подробности и / или ссылку на то, почему это неверно и какова исправленная концепция.

0
Вы говорите, что для конкретных процессоров JVM не существует, но я вижу 32-битные, 64-битные и SPARC JVM на странице загрузки: https://www.java.com/en/download/manual.jsp user2313067 7 лет назад 0
@ user2313067 Я немного удивлен вашим комментарием, потому что битность и процессор это разные вещи, я знаю, что есть разные JVM для 32 и 64 бит. Если вы можете доказать мне, что существуют разные JVM для процессоров Intel, AMD, Motorola, Qualcomm и т. Д., То я смиренно признаю, что заявления, сделанные в моем вопросе, были неверными. pjj 7 лет назад 0
Но AMD и Intel делают в основном процессоры x86 (32 бита) и x86_64 (64 бита). Они используют один и тот же [набор инструкций] (https://en.m.wikipedia.org/wiki/Instruction_set), поэтому они обрабатывают один и тот же машинный код. Я думаю, что Qualcomm производит в основном процессоры для рук, так что вам нужна JVM для рук, но я не уверен. user2313067 7 лет назад 0
При всем уважении, сэр, похоже, что у вас нет знаний о Java, вы сказали: «* вам понадобится ручная JVM *», это совсем не правильно, потому что для того, чтобы это было правдой, самое важное Функция Java должна быть нарушена, т. Е. Java является ** независимой от архитектуры и переносимой **. pjj 7 лет назад 0
Ну, байт-код Java остается архитектурой нейтральной и переносимой. Вам нужна только JVM для текущей архитектуры. x86 и x86_64 - это разные архитектуры, а SPARC - совершенно разные. Тем не менее, у вас есть JVM для SPARC Solaris и один для x86_64 Solaris. Суть Java в том, что сгенерированный байт-код не зависит от системы, в которой он будет работать. Вам все еще нужна JVM для ОС и архитектуры, на которой она работает. user2313067 7 лет назад 0
@ user2313067 Я могу согласиться с тем, что вы сказали выше, за исключением того, что «*** Тем не менее ** у вас есть JVM для SPARC Solaris и один для x86_64 Solaris. *», но другие ваши комментарии были совершенно не совпадают, и ни один из ваших комментарии помогают ответить на мои вопросы. Я немного удивлен, что даже без знания Java вы решили проголосовать за мой вопрос. pjj 7 лет назад 0
Я не отрицатель, и я не знаю, почему люди отвергли это. На самом деле, я просто проголосовал за это, так как думаю, что это совершенно ясно. Мне немного неясно, по теме это или нет. Перечитывая мои комментарии, я думаю, что я должен был написать JRE вместо JVM, но я хочу сказать, что вы переходите непосредственно от байт-кода Java к машинному коду процессора. Там нет машинного кода ОС. user2313067 7 лет назад 0
@ user2313067 О, пожалуйста, примите мои искренние извинения, так как я думал о вас, как о вниз избирателя. Таким образом, в технологии Java JRE - это не что иное, как JVM, поэтому, говорите ли вы JRE или JVM, это одно и то же. pjj 7 лет назад 0
Ну, JVM - это абстрактный компьютер, JRE содержит * реализацию * JVM, специфичную для вашей ОС и состояния команд. Смотрите [страницу википедии] (https://en.m.wikipedia.org/wiki/Java_virtual_machine) user2313067 7 лет назад 0

0 ответов на вопрос

Похожие вопросы