Четверг, 05.12.2024
Мафия Клуб: Закрытый клуб
Меню сайта
Категории раздела
Техника [175]
Информационные технологии
Мини-чат
500
Наш опрос
Оцените мой сайт
Всего ответов: 1
Статистика

Онлайн всего: 4
Гостей: 4
Пользователей: 0
Главная » 2015 » Октябрь » 3 » Байт-код Java
22:34
Байт-код Java
Байт-код Java — набор инструкций, исполняемых виртуальной машиной Java. Каждый код операции байт-кода — один байт. Используются не все 256 возможных значений кодов операций. 51 из них зарезервированы для использования в будущем.

Для программирования на языке Java или других JVM-совместимых языках, знание особенностей байт-кода не обязательно. Однако, как следует из публикации в журнале IBM developerWorks, «понимание байт-кода и понимание механизмов его генерации компилятором Java помогает Java-программисту так же, как и знание языка ассемблера помогает программисту, пишущему на Си или C++»

У одного байта существует 256 возможных значений, поэтому всего 256 возможных кодов операций в байт-коде. Код CA16 зарезервирован для использования отладчиком и не используется языком, как и коды FE16 и FF16, которые зарезервированы для использования виртуальной машиной и отладчиками. Коды в диапазоне CB16—FD16 в текущей версии JVM не используются и зарезервированы для будущих дополнений.

Инструкции можно разделить на несколько групп:
загрузка и сохранение (например, 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 генерируется для исполнения на виртуальной машине Java из исходного кода на языке Java. Единственный оригинальный компилятор, преобразующий код на языке Java в байт-кода Java — это Javac, созданный компанией Sun Microsystems. Но поскольку все спецификации байт-кода Java доступны, существуют и сторонние компиляторы, генерирующие этот байт-код. Примеры таких компиляторов:
Jikes(англ.)русск. — компилирует код на Java в Java байт-код (разработан IBM, написан на C++),
Espresso — компилирует код на Java в Java байт-код (для версии Java 1.0),
GCJ (GNU Compiler for Java) — компилирует код на Java в Java байт-код, также способен компилировать в нативный машинный код. Является частью GNU Compiler Collection.

Для некоторых проектов существуют компиляторы, позволяющие генерировать байт-код для JVM из исходного кода на другом языке программирования. Среди этих проектов:
ColdFusion,
JRuby и Jython (для Ruby и Python соответственно),
Groovy (скриптовый язык, основанный на Java),
Scala,
Kotlin,
JGNAT и AppletMagic,
компиляторы с языка Си в Java байт-код,
Clojure,
MIDletPascal,
JavaFX Script.

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

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

Виртуальная машина Java имеет поддержку языков с динамической типизацией. Большинство существующих инструкций JVM имеют статическую типизацию. Сигнатуры методов в местах их вызова проверяются во время компиляции. Механизм переноса этой проверки на время выполнения отсутствует.
Категория: Техника | Просмотров: 402 | Добавил: ADMINISTRATOR | Теги: Байт-код Java | Рейтинг: 0.0/0
Всего комментариев: 0
lign="center">


Вход на сайт
Поиск
Календарь
«  Октябрь 2015  »
ПнВтСрЧтПтСбВс
   1234
567891011
12131415161718
19202122232425
262728293031
Архив записей
Copyright Mafiaclub.at.ua © 2024