Movatterモバイル変換


[0]ホーム

URL:


Перейти до вмісту
Вікіпедія
Пошук

Байт-код Java

Матеріал з Вікіпедії — вільної енциклопедії.

Байт-код 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/suffixOperand type
iinteger
llong
sshort
bbyte
ccharacter
ffloat
ddouble
areference

Наприклад,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 байт-код. Наприклад, це такі компілятори як:

  • Jikes - компілює із Java у байт-код Java (розробленоIBM, реалізовано уC++)
  • Espresso - компілює із Java у байт-код Java(лише Java 1.0)
  • GNU Compiler for Java (GCJ) - компілює із Java у байт-код Java; може також компілювати у рідниймашинний код і був частиноюGNU Compiler Collection (GCC) аж до версії 6.

Існують компілятори здатні генерувати байт-код Java для JVM із інших мов таких як:

  • ColdFusion
  • JRuby таJython, дві скріптові мови базовані наRuby таPython
  • Apache Groovy - скриптова мова базована на Java
  • Scala - мова загального призначення з безпечними типами даних, що підтримує об'єктно-орієнтоване та функціональне програмування
  • JGNAT та AppletMagic - компілюють із мовиAda у байт-код Java
  • C to Java byte-code compiler
  • Clojure - функціональна мова закального призначення з родини мов програмуванняLisp із акцентом на паралельності виконання
  • Kawa - реалізація мови Scheme, діалекту мови Lisp
  • MIDletPascal
  • JavaFX Script
  • Kotlin
  • Object Pascal - код програми компілюється у байт код Java з використанням компілятораFree Pascal 3.0+.[2][3]

Джерела

[ред. |ред. код]
  1. абвLindholm, Tim; Yellin, Frank; Bracha, Gilad; Buckley, Alex (13 лютого 2015).The Java Virtual Machine Specification (вид. Java SE 8). Архіворигіналу за 16 квітня 2019. Процитовано 30 березня 2019.
  2. Free Pascal 3.0 release notes. Архіворигіналу за 20 квітня 2019. Процитовано 20 квітня 2019.
  3. Free Pascal JVM Target. Архіворигіналу за 18 квітня 2019. Процитовано 20 квітня 2019.
Рівень
Низькорівневі
Високорівневі
Загального
призначення
Серверні
Запитів до баз
даних[суперечливо 1]
Розмітки тавекторної
графіки
[суперечливо 1]
Синхронні
Символьних та
чисельних обчислень
Квантових обчислень
Логічні
Академічні
Езотеричні
  1. абНемає загальноприйнятого рішення, чи вважати усі ці мови саме мовами програмування
Отримано зhttps://uk.wikipedia.org/w/index.php?title=Байт-код_Java&oldid=39853100
Категорії:

[8]ページ先頭

©2009-2025 Movatter.jp