Кожен байт-код складається з одного байта - коду операції та від нуля та більше байт операндів [1]. З 256 можливих байтових кодів операцій використано 202 (~79%), 51 зарезервовано для майбутнього застосування (~20%) та 3 інструкції (~1%) зарезервовано для специфічних потреб віртуальної машини.[1].
Інструкції поділяються на ряд груп:
Завантаження і зберігання (наприклад, aload_0, istore)
Арифметичні та логічні (наприклад, ladd, fcmpl)
Перетворення типів (наприклад, i2b, d2i)
Створення та маніпулювання об'єктами (new, putfield)
Управління операндами стеку (наприклад, swap, dup2)
Передачі контролю (наприклад, ifeq, goto)
Виклику методів та повернення (наприклад, invokespecial, areturn)
Також є декілька інструкцій для деяких спеціалізованих задач як то викидання винятків, синхронізації, тощо.
Багато інструкцій мають спеціальні префікси і/або суфікси в залежності від типів операндів, якими вони маніпулюють.[1] А саме такі:
Prefix/suffix
Operand type
i
integer
l
long
s
short
b
byte
c
character
f
float
d
double
a
reference
Наприклад, iadd - додає дві цілочисельні (integer) змінні , dadd - додає два значення типу double.
Приклад
Розглянемо наступний код на мові програмування Java:
Java байт-код генерується переважно із мови Java для виконання віртуальною машиною Java. Спочатку існував лише один компілятор javac від Sun Microsystems, який компілював код на Java у байт-код Java; проте оскільки вся специфікація на байт-код Java доступна, з'явилися компілятори і від інших виробників, що здатні генерувати Java байт-код. Наприклад, це такі компілятори як:
Jikes - компілює із Java у байт-код Java (розроблено IBM, реалізовано у C++)
Espresso - компілює із Java у байт-код Java(лише Java 1.0)
↑ абвLindholm, Tim; Yellin, Frank; Bracha, Gilad; Buckley, Alex (13 лютого 2015). The Java Virtual Machine Specification (вид. Java SE 8). Архів оригіналу за 16 квітня 2019. Процитовано 30 березня 2019.