Перейти к содержимому

Байт код что это

  • автор:

Заглядываем Под Капот Языка Java: Компиляция и Байт-Код

Мир программирования часто делим на компилируемые и интерпретируемые языки. Но что, если я скажу вам, что Java предлагает третий, более интригующий способ — магию байт-кода?

Вот как это работает:

Как работает Java фото

Сначала у нас есть исходный код Java в виде файла с расширением .java.

Этот код проходит через компилятор, тщательно проверяясь на ошибки и преобразуясь в байт-код. Забудьте о машинном коде — байт-код здесь находится на первом плане.

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

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

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

Презентацию с видео можно скачать на Patreon .

Как объяснить, что такое байткод? [закрыт]

Закрыт. На этот вопрос невозможно дать объективный ответ. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы на него можно было дать ответ, основанный на фактах и цитатах.

Закрыт 3 года назад .

Пытался объяснить начинающим инженерам, что такое байткод (в рамках пояснения принципов выполнения Java программ). Так вот, я пытаюсь стандартно объяснить, мол это что то между компиляцией и интерпретацией, типа каждая команда джавовского байт кода, это как несколько ассемблеровских комманд, но они смотрят на меня и говорят — не понятноооо! Они не программисты, не знают что такое ни компиляция, ни интерпретация, ни ассемблер, это я попытался на пальцах им объяснить, и вроде до них что-то дошло, а как можно на пальцах используя жизненные примеры объяснит принцип работы байткода?

Отслеживать
23.4k 3 3 золотых знака 49 49 серебряных знаков 70 70 бронзовых знаков
задан 18 мая 2013 в 20:37
vanyamelikov vanyamelikov
3,113 3 3 золотых знака 30 30 серебряных знаков 59 59 бронзовых знаков
Если они не программисты, то им это не нужно. Не тратьте время.
18 мая 2013 в 20:44
18 мая 2013 в 20:45

Я сам не программист(по образованию), сейчас стоит вопрос проведения расчета охлаждения камеры сгорания ракетного двигателя. Так вот я хочу дать троим студентам эту задачу, на трех разных языках, и посмотреть у кого лучше получиться. Языки: java-среда эклипс, Си++ — Visual Studio и Visual Basic да еще и 6. Сам я его накидал в MathCAD и MathLab. Думаю должен получиться хороший эксперимент!

18 мая 2013 в 20:51

Извините за прямоту — но складывается ощушение, будто отвечающие, сами до конца не понимают, кроме @KoVadim что такое байт код. Не надо мразу минусовать! Вдумайтесь в вопросе было, что необходимо обяснить байт код, при условии понимания небольшого понятий компиляции и интерпретации! А у многих определения можно отнести как к первому, так ко второму и третьему!

19 мая 2013 в 6:05

Хотел было уже написать, но заглянул в Википедию и понял, что ничего добавить не смогу. @vanyamelikov, а Ваши коллеги эту статью читали?

19 мая 2013 в 19:50

7 ответов 7

Сортировка: Сброс на вариант по умолчанию

А нужно объяснять очень просто. Используя их положение. Для начала показываем этим инженерам программу на Java. Например, классический HelloWorld. И спрашиваем — понятно ли? Скорее всего они скажут нет. Объясняем, что и специальной программе, которая исполняет жава код, тоже не понятно. Для этого нужно «разобрать по косточкам».

Теперь делаем «псевдотрасляцию» — как для машинистки (секретарши). Для HelloWorld’а она будет такая.

  • настроить окружение (в коде этого нет, но это автоматом) — приготовить бумагу, проверить катриджи.
  • взять из памяти строку «привет мир».
  • нижимая кнопки, побуквенно ввести сроку (здесь появился цикл:) ).
  • почистить все за собой и отнести бумагу заказчику.

Формально — это и есть простой байткод. Только это человеческий байткод. А если в нем стандартизировать все операции и занумеровать, то все может быть сведено к набору чисел. Теперь к реальному байткоду перейти просто.

Легко будет объяснить и переносимость. Если человек (секретарша) выучит все коды операций, то она сможет выполнить любую работу, главное, что бы была последовательность кодов. А инженеры могут попробовать спаять-сконструировать устройство, которое будет это исполнять.

Байт-код

Байт-код или байтко́д (byte-code), иногда также используется термин псевдоко́д — машинно-независимый код низкого уровня, генерируемый транслятором и исполняемый интерпретатором. Большинство инструкций байт-кода эквивалентны одной или нескольким командам ассемблера. Трансляция в байт-код занимает промежуточное положение между компиляцией в машинный код и интерпретацией.

Байт-код называется так, потому что длина каждого кода операции — один байт, но длина кода команды различна. Каждая инструкция представляет собой однобайтовый код операции от 0 до 255, за которым следуют такие параметры, как регистры или адреса памяти. Это в типичном случае, но спецификация байт-кода значительно различается в языке.

Программа на байт-коде обычно выполняется интерпретатором байт-кода (обычно он называется виртуальной машиной, поскольку подобен компьютеру). Преимущество — в портируемости, т. е. один и тот же байт-код может исполняться на разных платформах и архитектурах. То же самое преимущество дают интерпретируемые языки. Однако, поскольку байт-код обычно менее абстрактный, более компактный и более «компьютерный» чем исходный код, эффективность байт-кода обычно выше чем чистая интерпретация исходного кода, предназначенного для правки человеком. По этой причине многие современные интерпретируемые языки на самом деле транслируют в байт-код и запускают интерпретатор байт-кода. К таким языкам относятся Perl, PHP и Python. Программы на Java обычно передаются на целевую машину в виде байт-кода, который перед исполнением транслируется в машинный код «на лету» — с помощью JIT-компиляции. В стандарте открытых загрузчиков Open Firmware фирмы Sun Microsystems байт код представляет операторы языка Forth.

В то же время возможно создание процессоров, для которых данный байт-код является непосредственно машинным кодом (такие процессоры существуют, например, для Java и Forth).

Также некоторый интерес представляет p-код (p-code), который похож на байт-код, но физически может быть менее лаконичным и сильно варьироваться по длине инструкции. Он работает на очень высоком уровне, например «напечатать строку» или «очистить экран». P-код повсеместно используется в СУБД и некоторых реализациях BASIC и Паскаля.

Языки и среды программирования, использующие байткод

  • Байткод Java выполняется виртуальной машиной Java (Java virtual machine).
  • Smalltalk.
  • Python.
  • Виртуальная машина Parrot
  • Платформа Microsoft .NET использует Intermediate Language (IL), исполняемый с помощью Common Language Runtime (CLR). См. Управляемый код.
  • PHP.
  • Forth

Ссылки

Байт-код Java: определение, инструкции, методы написания и примеры

Lorem ipsum dolor

Байт-код Java — это совокупность команд, которые исполняются в виртуальной машине Java. Одна команда равняется одному байту, поэтому байт-код Java кажется довольно примитивным , в едь одна команда будет равняться одной букве.

Даже начинающий Java-разработчик знает, что программный код, разработанный на этом языке, может запускаться на каждом устройстве, где инсталлирована виртуальная машина Java. Напомним, виртуальная машина Java — это «среда обработки», которая осуществляет запуск Java-приложения на любом устройстве, независимо от операционной системы. Благодаря этому п рограмма , написанная один раз на Java, может работать на Windows, Linux, MacOS без дополнительной адаптации под конкретную операционную систему.

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

Байт-код Java

  • «-с» — дизасс е мблирует класс Java;
  • «-р» — раскрывает закрытые члены класса;
  • «-v» — показывает подробную информацию, например , стек или пул констант.

Байт-код Java: инструкции

  • для загрузки и сохранения;
  • для арифметических операций;
  • для преобразования типов;
  • для формирования и трансформирования объектов;
  • для управления стеком;
  • для операторов перехода;
  • для вызывания и возвращения методов;
  • для специфических задач.
  • префикс «I» означает «integer»;
  • «L» — «long»;
  • «S» — «short»;
  • «B» — «byte»;
  • «C» — «character»;
  • «F» — «float»;
  • «D» — «double»;
  • «A» — «reference»;
  • и др.

Байт-код Java и компиляторы

  • «Javac» — считается оригинальной компилирующей программой байт-кода Java;
  • «Jikes» — компилятор, созданный компанией IBM, при этом он запрограммирован на языке С++;
  • «Espresso» — компилятор, который был популярен в первых модификациях Java;
  • «GCJ» — функциональный компилятор, который способен формировать не только байт-код, но и машинный;
  • и др.
  • «Jruby», который формирует byte-код для JVM из Ruby;
  • «Jpython», который формирует byte-код из Python;
  • «MIDletPascal» — из Pascal;
  • и др.

Заключение

Байт-код Java — это важная составляющая Java-экосистемы, благодаря которой достигается кроссплатформенность Java-программ. Байт-код необходим для виртуальной среды исполнения кода Java, а виртуальную среду Java можно инсталлировать в любую известную операционную систему.

Изучение byte-кода поможет лучше писать Java-программы, при этом корректировать сам байт-код не нужно. Однак о и зучение байт-кода не является обязательным требованием, чтобы писать Java-программы.

Мы будем очень благодарны

если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *