байт код это простыми словами
Байт-код
Байт-код или байтко́д (англ. byte-code ), иногда также используется термин псевдоко́д — машинно-независимый код низкого уровня, генерируемый транслятором и исполняемый интерпретатором. Большинство инструкций байт-кода эквивалентны одной или нескольким командам ассемблера. Трансляция в байт-код занимает промежуточное положение между компиляцией в машинный код и интерпретацией.
Байт-код называется так, потому что длина каждого кода операции — один байт, но длина кода команды различна. Каждая инструкция представляет собой однобайтовый код операции от 0 до 255, за которым следуют такие параметры, как регистры или адреса памяти. Это в типичном случае, но спецификация байт-кода значительно различается в разных языках.
Программа на байт-коде обычно выполняется интерпретатором байт-кода (обычно он называется виртуальной машиной, поскольку подобен компьютеру). Преимущество — в портируемости, т. е. один и тот же байт-код может исполняться на разных платформах и архитектурах. То же самое преимущество дают интерпретируемые языки. Однако, поскольку байт-код обычно менее абстрактный, более компактный и более «компьютерный», чем исходный код, эффективность байт-кода обычно выше, чем чистая интерпретация исходного кода, предназначенного для правки человеком. По этой причине многие современные интерпретируемые языки на самом деле транслируют в байт-код и запускают интерпретатор байт-кода. К таким языкам относятся Perl, PHP, Ruby (начиная с версии 1.9) и Python. Программы на Java обычно передаются на целевую машину в виде байт-кода, который перед исполнением транслируется в машинный код «на лету» — с помощью JIT-компиляции. В стандарте открытых загрузчиков Open Firmware фирмы Sun Microsystems байт-код представляет операторы языка Forth.
В то же время возможно создание процессоров, для которых данный байт-код является непосредственно машинным кодом (такие процессоры существуют, например, для Java и Forth).
Также некоторый интерес представляет p-код (p-code), который похож на байт-код, но физически может быть менее лаконичным и сильно варьироваться по длине инструкции. Он работает на очень высоком уровне, например «напечатать строку» или «очистить экран». P-код повсеместно используется в СУБД и некоторых реализациях BASIC и Паскаля.
Языки и среды программирования, использующие байткод
См. также
Полезное
Смотреть что такое «Байт-код» в других словарях:
БАЙТ-КОД — Иногда используется термин псевдокод машинно независимый код низкого уровня, генерируемый транслятором и исполняемый интерпретатором (англ. byte code) Словарь бизнес терминов. Академик.ру. 2001 … Словарь бизнес-терминов
байт-код — Машинно независимый код, генерируемый Java компилятором. [ГОСТ Р 54456 2011] Тематики телевидение, радиовещание, видео EN byte codeJava byte code … Справочник технического переводчика
Байт-код Java — Байт код Java набор инструкций, исполняемых виртуальной машиной Java. Каждый код операции байт кода один байт. Используются не все 256 возможных значений кодов операций. 51 из них зарезервированы для использования в будущем.… … Википедия
Код (значения) — Код (фр. code, от лат. codex): В Викисловаре есть статья «код» … Википедия
Код операции — Эта статья об инструкциях; о системе команд в целом см.: Машинный код. Код операции, операционный код, опкод часть машинного языка, называемая инструкцией и определяющая операцию, которая должна быть выполнена. Определение и формат кодов… … Википедия
Байт — в запоминающих устройствах наименьшая адресуемая единица данных в памяти ЭВМ, обрабатываемая как единое целое. По умолчанию байт считается равным 8 битам. Обычно в системах кодирования данных байт представляет собой код одного печатного или… … Финансовый словарь
БАЙТ — (англ. byte) набор из стандартного числа (обычно 8) битов (двоичных единиц), используемый как единица количества информации при её передаче, хранении и обработке на ЭВМ. В международных системах кодирования данных (ASCII, EBCDIC) Б. представляет… … Юридическая энциклопедия
Байт — У этого термина существуют и другие значения, см. Byte. Байт (англ. byte) единица хранения и обработки цифровой информации; совокупность битов, обрабатываемая компьютером одномоментно. В современных вычислительных системах байт… … Википедия
Код операции (информатика) — Эта статья об инструкциях; о системе команд в целом см.: Машинный код. В комьютерной отрасли под кодом операции (также операционный код, опкод англ. operation code) понимают часть машинного языка, называемую инструкцией, определяющую операцию,… … Википедия
Промежуточный код — Байт код или байткод (англ. byte code), иногда также используется термин псевдокод машинно независимый код низкого уровня, генерируемый транслятором и исполняемый интерпретатором. Большинство инструкций байт кода эквивалентны одной или нескольким … Википедия
Введение в байт-код Java
May 15 · 6 min read
Каждому Java-разработчику известно, какую роль в экосистеме языка играет JVM. Однако большинство не разбирается в том, как работает JVM под капотом. Хотя для разработки на Java это не обязательно, код станет лучше, если вы глубже поймете JVM, потому что так вы будете знать, как каждая строка кода влияет на процессы внутри JVM.
Однако для начала нужно понять, что такое байт-код. Итак, поговорим о вводе и выводе байт-кода Java и о том, как он влияет на JVM во время запуска программы.
Что такое байт-код Java?
Если в какой-то момент профессиональной жизни вы слышали, как проповедуют независимость Java-программ от платформ, скажите спасибо байт-коду.
Как генерируется байт-код?
Как посмотреть байт-код Java?
Если вам хочется увидеть сам байт-код, простейший способ — воспользоваться командной строкой.
Как работает JVM
Прежде чем углубляться в байт-код, стоит понять, как JVM его обрабатывает.
Методы — одна из важнейших составляющих кода для JVM. Среда выполнения Java-программы — это, по сути, набор методов, вызываемых JVM. JVM создает фрейм для каждого такого метода и помещает созданный фрейм наверх стека текущего потока для выполнения.
Фрейм состоит из локальной среды, которая необходима для поддержания его выполнения. Как правило он содержит массив локальных переменных и стек операндов. Посмотрим, что эти элементы из себя представляют.
Массив локальных переменных
Массив локальных переменных, как следует из названия, нужен для хранения локальных переменных в методе. Также он хранит аргументы, которые принимает метод.
Определим два метода: один статический и один метод экземпляра, но схожие во всем остальном.
Локальные массивы переменных для этих методов будут выглядеть следующим образом:
Стек операндов
Стек операндов — это рабочее пространство внутри фрейма метода. Поскольку это стек, вы можете помещать и забирать значения только из верхней его части. Большинство инструкций байт-кода, принадлежащих определенному методу, либо участвуют в помещении значений в стек, либо забирают значения из стека для обработки.
Инструкция байт-кода load и ее расширения нужны для перемещения значения, хранящегося в массиве переменных, в стек. Инструкция store применяется для извлечения значений из стека и сохранения в массиве переменных. Существуют и другие инструкции, которые извлекают значения из стека для обработки.
Посмотрим в байт-код
Ради возможности вглядеться в байт-код, я написал простой Java-класс:
Деконструкция байт-кода
Здесь важно отметить еще одно: индексы, заданные инструкциям байт-кода — как видим, они не увеличиваются на единицу для каждой новой инструкции.
Число перед инструкцией указывает на индекс ее начального байта. А любой байт-код состоит из однобайтовых опкодов, за которыми следует ноль или более операндов.
Вывод
Надеюсь, вам удалось узнать кое-что новое о том, как работает байт-код Java. С этим более четким знанием вы сможете лучше писать код. Можете даже поэкспериментировать с самим байт-кодом во время выполнения программы, воспользовавшись такими библиотеками, как ASM.
Путь к пониманию байт-кода V8
V8 — это JavaScript-движок Google с открытым кодом. Его используют Chrome, Node.js и многие другие приложения. Этот материал, подготовленный сотрудником Google Франциской Хинкельманн, посвящён описанию формата байт-кода V8. Байт-код довольно просто читать, если понять некоторые базовые вещи.
Конвейер компиляции V8
Зажигание! Пуск! Интерпретатор Ignition, название которого можно перевести как «зажигание», является частью конвейера компиляции V8 с 2016-го года
Когда V8 компилирует JavaScript-код, парсер генерирует абстрактное синтаксическое дерево. Синтаксическое дерево — это древовидное представление синтаксической структуры JS-кода. Интерпретатор Ignition генерирует байт-код из этой структуры данных. Оптимизирующий компилятор TurboFan, в итоге, генерирует из байт-кода оптимизированный машинный код.
Конвейер компиляции V8
Если вы хотите узнать о том, почему V8 имеет два режима исполнения, взгляните на моё выступление с JSConfEU.
Основы байт-кода V8
Байт-код — это абстракция машинного кода. Компилировать байт-код в машинный код проще, если байт-код спроектирован с использованием той же вычислительной модели, которая применяется в физическом процессоре. Именно поэтому интерпретаторы часто являются регистровыми или стековыми машинами.
Интерпретатор Ignition — это регистровая машина с накопительным регистром.
Код слева удобен для людей. Код справа — для машин
Анализ байт-кода функции
Теперь, после того, как мы разобрали основные понятия, посмотрим на байт-код реальной функции.
На немалую часть этих данных мы можем не обращать внимания, сосредоточившись на байт-кодах. Вот описание того, что мы тут видим.
Команда LdaSmi [1] загружает константу 1 в накопительный регистр.
LdaNamedProperty a0, [0], [4]
Теперь содержимое регистров выглядит следующим образом.
Обратите внимание на то, что байт-код, которому посвящён этот материал, используется в V8 версии 6.2, в Chrome 62 и в ещё не выпущенном Node 9. Мы, в Google, постоянно работаем над V8 в направлениях улучшения производительности и уменьшения потребления памяти. В других версиях V8 в байт-коде могут присутствовать некоторые отличия от того, что было описано здесь.
Итоги
На первый взгляд байт-код V8 может показаться довольно-таки загадочным, особенно когда он выводится с массой дополнительных сведений. Однако, как только вы узнаете о том, что Ignition — это регистровая машина с накопительным регистром, вы сможете понять назначение большинства байт-кодов.
Уважаемые читатели! Планируете ли вы анализировать байт-код ваших JS-программ?
Как объяснить, что такое байткод? [закрыт]
Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы на него можно было дать ответ, основанный на фактах и цитатах.
7 ответов 7
Легко будет объяснить и переносимость. Если человек (секретарша) выучит все коды операций, то она сможет выполнить любую работу, главное, что бы была последовательность кодов. А инженеры могут попробовать спаять-сконструировать устройство, которое будет это исполнять.
@vanyamelikov по-моему вы сами не понимаете что такое байткод Java 🙂
Байткод Java это машинные инструкции для несуществующей Java машины, которую часто называют Java Virtual Machine.
В чем сила брат? А сила брат в том, что вы пишете для некоей Java машины (когда-нибудь кто-нибудь сделает таки физическую Java машину). Что такое портабельность Java кода: это всего лишь вопрос реализации Java машины на какой-то реальной машине ну и т.д.
Я бы попытался объяснить как-то так:
Компьютеры «думают» простейшими инструкциями, и когда вы пишете программу допустим на С то она преобразуется в набор примитивных машинных инструкций. Например было выражение на языке программирования
Оно грубо говоря преобразуется в последовательность инструкций
Так как компьютеры бывают разные то и инструкции которые они используют тоже не всегда одни и те же.
Буду рад услашать критику по поводу подобного объяснения^_^
Я так понимаю, вопрос в том, как объяснить, что такое байт-код, не прибегая к объяснению остального контекста. Мне кажется, что не получится объяснить, что такое байт-код, не объяснив, что такое машинный язык и язык программирования, потому что он ведь не сам по себе, он прослойка между ними — т.е. чтобы понять, что делает прослойка, нужно понять, между чем она лежит.
Самый лучший способ практический:
Зачем придумали байт-код? В начале были интерпретаторы которые просто выполняли код из текста, но так как эффективность в постоянном разборе строк не есть хорошо, придумали работать с байтами, а не как с исходным кодом строк, то есть программа преобразует исходный синтаксис ЯП-а в байт-код где есть инструкции и метки и т.п. почти как в ASM, отсюда и происходит название виртуальная машина, а не интерпретатор, к примеру в Java это JVM. Так что тут всё просто, виртуальная машина при загрузке байт-кода исполняет его. Но это ещё не всё, для большей производительности ввели JIT, то есть компиляции байт-кода в нативный код на ходу исполнения, тем самым не много получаем конкурентоспособность программ к компилируемым ЯП-ам.
Всё ещё ищете ответ? Посмотрите другие вопросы с метками c# c java байткод c++ или задайте свой вопрос.
Похожие
дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.9.23.40285
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Байт-код
Многие современные языки программирования, особенно интерпретируемые, используют байт-код для облегчения и ускорения работы интерпретатора. Трансляция в байт-код является методом, промежуточным по эффективности между прямой интерпретацией и компиляцией в машинный код.
По форме байт-код похож на машинный код, но предназначен для исполнения не реальным процессором, а виртуальной машиной. В качестве виртуальной машины обычно выступает интерпретатор соответствующего языка программирования (иногда дополненный JIT- или AOT-компилятором). Спецификации байт-кода и исполняющих его виртуальных машин могут сильно различаться для разных языков: часто байт-код состоит из инструкций для стековой виртуальной машины, однако могут использоваться и регистровые машины. Тем не менее, большинство инструкций байт-кода обычно эквивалентны одной или нескольким командам ассемблера.
Байт-код называется так, потому что длина каждого кода операции традиционно составляет один байт. Каждая инструкция обычно представляет собой однобайтовый код операции (от 0 до 255), за которым могут следовать различные параметры, например, номер регистра или адрес в памяти.
Связанные понятия
В программировании, ассемблерной вставкой называют возможность компилятора встраивать низкоуровневый код, написанный на ассемблере, в программу, написанную на языке высокого уровня, например, Си или Ada. Использование ассемблерных вставок может преследовать следующие цели.