- Байт-код Java
-
Байт-код Java — набор инструкций, исполняемых виртуальной машиной Java. Каждый код операции байт-кода — один байт. Используются не все 256 возможных значений кодов операций. 51 из них зарезервированы для использования в будущем.
Инструкции
Инструкции можно разделить на несколько групп:
- загрузка и сохранение (например, ALOAD_0, ISTORE),
- арифметические и логические операции (например, IADD, FCMPL),
- преобразование типов (например, I2B, D2I),
- создание и преобразование объекта (например, NEW, PUTFIELD),
- управление стеком (например, DUP, POP),
- операторы перехода (например, GOTO, IFEQ),
- вызовы методов и возврат (например, INVOKESTATIC, IRETURN).
Также есть несколько инструкций, выполняющих специфические задачи, такие как выбрасывание исключений, синхронизация и т. д.
Многие инструкции имеют префиксы или суффиксы, соответствующие их операндам:
Префикс или суффикс Тип операнда I
integer L
long S
short B
byte C
character F
float D
double A
reference Например, операция IADD — сложение двух целых чисел, в то время как FADD — сложение чисел с плавающей точкой.
Пример
Рассмотрим следующий пример кода на языке Java.
outer: for (int i = 2; i < 1000; i++) { for (int j = 2; j < i; j++) { if (i % j == 0) continue outer; } System.out.println (i); }
Компилятор Java может транслировать приведённый выше код Java в следующий байт-код:
0: iconst_2 1: istore_1 2: iload_1 3: sipush 1000 6: if_icmpge 44 9: iconst_2 10: istore_2 11: iload_2 12: iload_1 13: if_icmpge 31 16: iload_1 17: iload_2 18: irem 19: ifne 25 22: goto 38 25: iinc 2, 1 28: goto 11 31: getstatic #84; //Field java/lang/System.out:Ljava/io/PrintStream; 34: iload_1 35: invokevirtual #85; //Method java/io/PrintStream.println:(I)V 38: iinc 1, 1 41: goto 2 44: return
См. также
Категория:- Java
Wikimedia Foundation. 2010.