Байт-код Java — набір інструкційвіртуальної машини Java (JVM).
Коженбайт-код складається з одного байта -коду операції та від нуля та більше байт операндів[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:
outer:for(inti=2;i<1000;i++){for(intj=2;j<i;j++){if(i%j==0)continueouter;}System.out.println(i);}
Компілятор java може транслювати цей вищенаведений код у байт-код наступним чином:
0:iconst_21:istore_12:iload_13:sipush10006:if_icmpge449:iconst_210:istore_211:iload_212:iload_113:if_icmpge3116:iload_117:iload_218:irem19:ifne2522:goto3825:iinc2,128:goto1131:getstatic#84;//Fieldjava/lang/System.out:Ljava/io/PrintStream;34:iload_135:invokevirtual#85; // Method java/io/PrintStream.println:(I)V38:iinc1,141:goto244:return
Java байт-код генерується переважно із мови Java для виконання віртуальною машиною Java. Спочатку існував лише один компіляторjavac відSun Microsystems, який компілював код на Java у байт-код Java; проте оскільки вся специфікація на байт-код Java доступна, з'явилися компілятори і від інших виробників, що здатні генерувати Java байт-код. Наприклад, це такі компілятори як:
Існують компілятори здатні генерувати байт-код Java для JVM із інших мов таких як: