2014-01-17 8 views
3

Я читал о instruction set в wiki, и я наткнулся на этот пункт:- это байт-код, рассматриваемый как набор инструкций для JVM?

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

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

ответ

10

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

enter image description here

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

+0

+1 для выбора диаграммы. –

+0

Я не буду размещать «Java API» под компонентами JVM, так как большинство Java-API реализовано на Java и проходит через ту же цепочку, что и код приложения. – Holger

3

является байткоды являются ISA для виртуальной машины Java

Код байт инструкции JVMs.

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

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

+2

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

+1

@ user1988876: Это правильно. – blackcompe

2

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

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

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

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

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

+0

написать JVM для нового процессора будет сложно, я думаю, одна сделка с ISA для процессора с одной стороны и байткодов, с другой стороны! –

+0

@ user1988876: Умм ... да, вы могли бы сказать это :) Возможно, с командой опытных разработчиков это было бы не так уж плохо. Проектирование самого языка - сложная часть. – blackcompe

+1

@ user1988876: Внедрение интерпретатора или JIT-компилятора для байтового кода не так сложно, поскольку вам нужно всего лишь перевести около 200 инструкций. Но на самом деле это подразумевает реализацию объектной модели, управления памятью, потоков и синхронизации, компонентов ввода-вывода низкого уровня и некоторых других. Это будет очень много, и он поглотит энтузиазм, который изначально создавался при просмотре того, насколько легко была часть байтового кода. – Holger

 Смежные вопросы

  • Нет связанных вопросов^_^