e9a2cc89

Что такое байт код

БАЙТ-КОД — Иногда используется термин псевдокод машинно независимый код низкого уровня, генерируемый транслятором и исполняемый интерпретатором (англ. 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), иногда также используется термин псевдокод машинно независимый код низкого уровня, генерируемый транслятором и исполняемый интерпретатором. Большинство инструкций байт кода эквивалентны одной или нескольким … Википедия

Я работаю с Python и C#, и я понимаю, зачем нужен байт-код (и зачем нужен в других интерпретируемых языках). Платформонезависимость — это действительно здорово.

Но зачем заставлять целевую машину пережёвывать байт-код посредством виртуальной машины/JIT-компилятора? Почему нельзя один раз скомпилировать под целевую архитектуру при первом запуске/обращении или при установке/деплое (Ahead-Of-Time, короче)?

Читайте также:  Включение компьютера с телефона андроид

Причина, по которой возник сей глупый вопрос, так же глупа и банальна: ведь программа, написанная на C, будет работать быстрее аналогичной по функционалу программы, написанной на любом интерпретируемом языке.

  • Вопрос задан более трёх лет назад
  • 6993 просмотра

Особенность многих jit компиляторов в том что они умеют оптимизировать код на лету, используя статистику выполнения программы,
например hotpath оптимизация считает количество попаданий в ту или иную часть программы, и генерит машинный код только для кусков кода где программа реально часто выполняется.
Что это дает: за счет этого jit оптимизатор может разместить куски часто выполняющегося машинного кода очень близко друг к другу — так что они все целиком будут умещаться например в кэше процессора, и да — jit компилятор порой за счет этого обгоняет прекомпилированный машинный код.

Есть еще куча оптимизаций например касающаяся языков которые поддерживают closures, как показывает практика большинство клозур используются в коде с одинаковыми переменными окружения, что позволяет не выполнять кучу работы по сохранению окружения и тп — а просто заинлайнить клозуру — другое дело что на этапе компиляции понять это невозможно, а вот на этапе выполнения сохранить hash окружения и если он не меняется то инлайнить код — легко

Есть еще куча подобных оптимизаций которые реально помогают динамическим языкам работать почти наравне по скорости с С на некоторых задачах, яркий пример luajit

И до кучи динамические языки зачастую невозможно заранее перенести в native код чтобы сам этот код не прератился в некорый интерпретатор байткода, вот хорошо про это написано:
stackoverflow.com/questions/15626611/can-regular-j.

(c# кстати нединамический поэтому для него насколько я помню была какая то тулзень для прекомпиляции в native код — но я уже лет сто 😉 не писал на c# поэтому точно не помню)

Компиляторы — это программы, которые преобразуют исходные тексты программ, написанные на языке программирования высокого уровня, в программу на машинном языке, «понятную» компьютеру.

Определение

Компиляторы — это программы, которые преобразуют исходные тексты программ, написанные на языке программирования высокого уровня, в программу на машинном языке, «понятную» компьютеру. Полученный код, называемый исполняемой программой, можно устанавливать и запускать на нужном компьютере без дополнительных преобразований. Интерпретаторы выполняют аналогичную функцию, но делают это построчно всякий раз во время исполнения программы. Байт-код — это промежуточный подход, при котором программа преобразуется в промежуточный двоичный вид, интерпретируемый некой «виртуальной машиной» во время исполнения.

Читайте также:  Как пользоваться программой ccleaner на русском языке

Причиной вновь вспыхнувшего интереса к компиляторам стало появление быстрых и сложных 64-разрядных микропроцессоров, типичным представителем которых можно считать Intel Itanium. Все усовершенствования в архитектуре процессоров, такие как распараллеливание и предсказание ветвления, а также возможность резкого увеличения производительности, окажутся бесполезны до тех пор, пока программисты не начнут их реально использовать.

Забота о создании кода, ориентированного на эффективную параллельную обработку, серьезно усложняет и без того непростую задачу современного программирования. В итоге ответственность за увеличение производительности, на которое потенциально способны будущие 64-разрядные процессоры, ложится на компиляторы нового поколения.

Компиляторы, которым предстоит обеспечить значительное увеличение скорости вычислений, уже создаются в исследовательских лабораториях ряда компаний — Hewlett-Packard, Intel, MetaWare, Microsoft и других. В феврале прошлого года компания Silicon Graphics объявила о том, что ее оптимизированные компиляторы позволяют увеличить на 30-100% по сравнению с существующими продуктами производительность программ, работающих на компьютерах с процессорами Itanium и операционной системой Linux.

Как и их предшественники, оптимизированные компиляторы преобразуют программы на высокоуровневом языке в машинный код. Однако помимо этого они гарантируют максимально эффективное использование памяти (и в первую очередь процессорного кэша и механизма распараллеливания).

Например, процессоры Itanium предназначены для того, чтобы одновременно обрабатывать до шести команд на каждый такт процессора. Но для этого компилятор должен поддерживать стабильную передачу данных через конвейер команд.

Одна из возможных методик состоит в объединении часто используемых команд в группы, которые процессор может обрабатывать одновременно. Оптимизированные компиляторы также максимально используют свободные такты процессора за счет предсказания ветвления, пытаясь заранее определить результат команд наподобие GOTO и тем самым уберечь процессор от необходимости искать требуемые данные по всей программе. Метод спекулятивных вычислений предполагает, что оптимизированный компилятор загружает команды с некоторым упреждением.

Другие пути

Интерпретаторы также преобразуют код, написанный на языке программирования высокого уровня, но они делают это построчно всякий раз, когда программа запускается на выполнение. Для того чтобы программа была «понятна» компьютеру, на котором предполагается исполнять высокоуровневый код непосредственно, на нем также должна работать программа интерпретации. Интерпретаторы полезны для тестирования нового или модифицированного кода или при обучении программированию.

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

Читайте также:  Цикл с параметром питон

Идеология Java опирается на третий, своего рода компромиссный подход — байт-код. При использовании байт-кода высокоуровневые программы преобразуются в промежуточный вид, способный исполняться на различных аппаратных платформах. Байт-код Java преобразуется в машинный код с помощью специального интерпретатора, называемого виртуальной машиной Java (Java Virtual Machine — JVM). JVM формирует выделенное пространство в памяти, которое отделено от памяти основной системы, для хранения байт-кода и порождаемых структур.

Использование динамических (just-in-time, JIT — «точно в срок») компиляторов увеличивает производительность Java-приложений. В этом случае не JVM исполняет байт-код, а JIT-компилятор преобразует его в «родной» для данной машины код. Таким образом, с одной стороны, повышается производительность скомпилированного кода, а с другой — сохраняется переносимость, свойственная Java.

Hewlett-Packard придерживается аналогичной тактики со своим TurboChai — средой Java для встроенных приложений. В TurboChai производительность увеличивается за счет преобразования наиболее часто используемого кода в данном встроенном приложении. С помощью выборочной компиляции в HP стараются оптимальным образом управлять использованием памяти, в то же время достигая скоростей, сравнимых с теми, которых позволяют добиться JIT-компиляторы. TurboChai использует байт-код Java в качестве входной информации и генерирует исходные тексты ANSI C, а затем использует любой компилятор для языка Си для получения оптимизированного «родного» машинного кода.

В прошлом году Microsoft анонсировала C#, объектно-ориентированный язык программирования, согласованный с XML. Корпорация подает новый язык как логическое продолжение Си и C++ для Web-приложений. Ключевыми модулями станут Common Language Runtime для C# и специальный компилятор, который преобразует текст, написанный на традиционных языках Кобол, Perl, Фортран или других, в промежуточный язык, который будет работать на новой платформе Microsoft .Net.

Конечные пользователи вряд ли будут уделять много внимания компиляторам. Тем не менее может появиться новое поколение компиляторов, позволяющих увеличить производительность до уровня, позволяющего убедить профессионалов в необходимости использовать 64-разрядные аппаратные архитектуры.

Создание инструментальных средств разработки

Инструментарий Что нового Цели
Оптимизированные компиляторы Обеспечивают высокую производительность процессорной обработки за счет распараллеливания, предсказания ветвлений и спекулятивных вычислений Помогают реализовать потенциал 64-разрядных процессоров
JIT-компиляторы В реальном времени компилируют код Увеличивают производительность интерпретируемых языков, таких как Java
"Выборочные" компиляторы Компилируют только часто используемый код Увеличивают производительность, не тратя понапрасну дорогостоящие ресурсы памяти

Поделитесь материалом с коллегами и друзьями

Ссылка на основную публикацию
Что означает охват в статистике вконтакте
Что такое охват подписчиков во Вконтакте Как посмотреть охват? Для сообщества Перейдите в сообщество, на панели управления нажмите кнопку «Статистика»,...
Что делать если взломали сим карту
Подавляющее большинство современных телефонов оборудовано лотком под сим-карту, вытащить который очень легко с помощью скрепки или иглы. Какие-то телефоны после...
Что делать если забыл название игры
В сообществе Лига Геймеров очень часто всплывают посты "Помогите найти игру". Там их не очень жалуют. Для этого и создано...
Что означает ошибка esp
Однажды ни с того ни с сего во время достаточно спокойной езды загорелась ошибка: "Сервис: ESP", затем следом появилось сообщение...