Другие языки программирования и технологии

В чем отличие байт кода от машинного?

Байт-кодом называется машинный код для виртуальной машины.
ТМ
Темирболат Муртазин
68 790
Лучший ответ
Стас Грибков Байт код - это упрощенный исходный код. Он переносим так же как и исходный, но создан не для чтения программистами, а для дальнейшей компиляции. Его плюс в том, что он меньше весит и быстрее компилируется.
Стас Грибков То, что он компилируется быстрее и делает его широко используемым в интерпретируемых языках, которые компилятся на лету. Но далеко не все интерпретируемые языки являются языками, работающими на виртуальных машинах, как Java или C#.
Байт-код — это промежуточный подход, при котором программа преобразуется в промежуточный двоичный вид, интерпретируемый некой «виртуальной машиной» во время исполнения. Причиной вновь вспыхнувшего интереса к компиляторам стало появление быстрых и сложных 64-разрядных микропроцессоров, типичным представителем которых можно считать Intel Itanium. Все усовершенствования в архитектуре процессоров, такие как
распараллеливание и предсказание ветвления, а также возможность резкого
увеличения производительности, окажутся бесполезны до тех пор, пока программисты
не начнут их реально использовать. .Байт-код Java преобразуется в машинный код с помощью специального
интерпретатора, называемого виртуальной машиной Java (Java Virtual Machine —
JVM). JVM формирует выделенное пространство в памяти, которое отделено от памяти
основной системы, для хранения байт-кода и порождаемых структур. Для программирования на языке Java или других JVM-совместимых языках, знание особенностей байт-кода не обязательно. Однако, как следует из публикации в журнале IBM developerWorks, «понимание байт-кода и понимание механизмов его генерации компилятором Java помогает Java-программисту так же, как и знание языка ассемблера помогает программисту, пишущему на Си или С++».
Степан Бойко
Степан Бойко
3 073
Байт-код это промежуточный код. Он в свою очередь транслируется в машинный код виртуальной машиной.
Например, исходный код программы на C# компилируется в байт-код, после чего виртуальная машина-CLR интерпретирует и исполняет этот промежуточный код.
Байткод требует трансформации в машинный (JIT- или AOT-компиляция) или интерпретации чтобы быть выполненым, т. к. процессоры, за редким исключением (ARM Jazelle, ThumbEE), ничего не знаю о байткоде и о том, как его выполнять. Поскольку байткод не привязан к аппаратной архитектуре он 100% переносим - нужно лишь реализовать компилятор/интерпретатор для целевой платформы. Зачастую байткод обладает более развитой системой типов и поддерживает высокоуровневые инструкции типа "создать объект", "вызвать виртуальный метод" и т. п.